A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,

为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。

Lock是个接口。

void lock(): 获取锁。
void unlock():释放锁。
ReentrantLock是Lock的实现类。
public class SellTicket implements Runnable {

   // 定义票
   private int tickets = 100;

   // 定义锁对象
   private Lock lock = new ReentrantLock();

   @Override
   public void run() {
           while (true) {
                   try {
                           // 加锁
                           lock.lock();
                           if (tickets > 0) {
                                   try {
                                           Thread.sleep(100);
                                   } catch (InterruptedException e) {
                                           e.printStackTrace();
                                   }
                                   System.out.println(Thread.currentThread().getName()
                                                   + "正在出售第" + (tickets--) + "张票");
                           }
                   } finally {
                           // 释放锁
                           lock.unlock();
                   }
           }
   }

}
---------------------
【转载,仅作分享,侵删】
作者:imxlw00
原文:https://blog.csdn.net/imxlw00/article/details/85335967


1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马