首页 > 代码库 > java 22 - 14 JDK1.5以后的Lock锁
java 22 - 14 JDK1.5以后的Lock锁
在之前解决线程安全的过程中,虽然我们可以理解同步代码块和同步方法的锁对象问题,
但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,
为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。
注意:Lock是个接口。
2个常用方法:
void lock(): 获取锁。
void unlock():释放锁。
ReentrantLock是Lock的实现类。
1 public class SellTicket implements Runnable {//别忘了这个继承接口 2 // 定义100张票 3 private int tickets = 100; 4 5 // 定义锁对象 6 private Lock lock = new ReentrantLock(); 7 8 public void run() { 9 10 //这里使用了不带catch的try..finally的格式,中间的代码出现问题了,就直接执行finally11 12 while (true) {13 try {14 15 // 加锁,在会出现错误的代码前加锁,跟之前的一样16 lock.lock();17 18 if (tickets > 0) {19 20 // 休眠0.1秒21 try {22 Thread.sleep(100);23 } catch (InterruptedException e) {24 // TODO Auto-generated catch block25 e.printStackTrace();26 }27 28 System.out.println(Thread.currentThread().getName()29 + "正在出售第" + (tickets--) + "张票");30 }31 } finally {32 // 解锁 中间代码一有异常,就解锁,33 lock.unlock();34 }35 }36 }37 }
java 22 - 14 JDK1.5以后的Lock锁
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。