首页 > 代码库 > 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锁