码迷,mamicode.com
首页 > 编程语言 > 详细

java 22 - 14 JDK1.5以后的Lock锁

时间:2016-10-10 20:12:31      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

在之前解决线程安全的过程中,虽然我们可以理解同步代码块和同步方法的锁对象问题,

但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,

为了更清晰的表达如何加锁和释放锁,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的格式,中间的代码出现问题了,就直接执行finally
11 
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 block
25                         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锁

标签:

原文地址:http://www.cnblogs.com/LZL-student/p/5946893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!