前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK5中Lock锁的使用

JDK5中Lock锁的使用

作者头像
黑泽君
发布2018-10-11 11:41:33
5020
发布2018-10-11 11:41:33
举报
文章被收录于专栏:黑泽君的专栏黑泽君的专栏

(1)JDK5中Lock锁的使用   虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock接口。 即:JDK5以后的针对线程的锁定操作释放操作。   Lock实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作。

(2)Lock接口的方法   void lock() 获取锁(加锁)   void unlock() 释放锁

  ReentrantLock类是Lock接口的实现类。

(3)示例代码如下

代码语言:javascript
复制
 1 package cn.itcast_01;
 2 /*
 3  * 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,
 4  * 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock接口。
 5  * 
 6  * Lock接口的方法:
 7  *         void lock() 获取锁(加锁)
 8  *         void unlock() 释放锁
 9  * 
10  * ReentrantLock类是Lock接口的实现类。
11  */
12 public class SellTicketDemo {
13     public static void main(String[] args) {
14         // 创建资源对象
15         SellTicket st = new SellTicket();
16 
17         // 创建三个线程对象
18         Thread t1 = new Thread(st, "窗口1");
19         Thread t2 = new Thread(st, "窗口2");
20         Thread t3 = new Thread(st, "窗口3");
21 
22         // 启动线程
23         t1.start();
24         t2.start();
25         t3.start();
26     }
27 }
代码语言:javascript
复制
 1 package cn.itcast_01;
 2 
 3 import java.util.concurrent.locks.Lock;
 4 import java.util.concurrent.locks.ReentrantLock;
 5 
 6 public class SellTicket implements Runnable {
 7     // 定义票
 8     private int tickets = 100;
 9 
10     // 定义锁对象
11     private Lock lock = new ReentrantLock(); // 多态
12 
13     @Override
14     public void run() {
15         while (true) {
16             // 如果锁里面有异常发生,释放锁lock.unlock();就不会被执行,
17             // 为了保证释放锁lock.unlock();被执行,使用try...finally...
18             // 将lock.unlock();放在finally里面。
19             try {
20                 // 获取锁(加锁)
21                 lock.lock();
22                 if (tickets > 0) {
23                     try {
24                         Thread.sleep(100);
25                     } catch (InterruptedException e) {
26                         e.printStackTrace();
27                     }
28                     System.out.println(Thread.currentThread().getName() + "正在出售第" + (tickets--) + "张票");
29                 }
30             } finally {
31                 // 释放锁
32                 lock.unlock();
33             }
34         }
35     }
36 
37 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档