Java中的显示锁ReentrantLock使用时机
来源:互联网 发布:photoshop 2017 mac 编辑:程序博客网 时间:2024/06/07 22:13
从Java 5.0开始,Java提供了访问共享对象的新机制:ReentrantLock。它实现了Lock接口:
public interface Lock {
void lock();
void lockInterruptibly() throws InterrupttedException;
boolean tryLock();
boolean tryLock(long timeout, TimeUnitunit) throws InterruptedException;
void unlock();
Condition newCondition();
}
ReentrantLock提供了与synchronized相同的互斥和内存可见性的保证。获得ReentrantLock的锁与进入synchronized块有着相同的内存语义,释放ReentrantLock锁与退出synchronized块有相同的内存语义。
那么为什么要创建与内存锁如此相似的机制呢?内存锁在大部分情况下能够很好的工作,但是有些功能上存在着局限:
1)不能中断那些正在等待获取锁的进程,并且在请求锁失败的情况下,必须无限等待;
2)内部锁必须在获取它们的代码块中被释放;这很好的简化了代码,但是在某些情况下,一个更灵活的加锁机制提供了更好的活跃度和性能。
使用ReentrantLock的一般形式为:
Lock lock = new ReentrantLock();
........
lock.lock();
try {
//更新对象的状态
//捕获异常,必要时恢复到原来的不变约束
} finally {
lock.unlock(www.37meishi.com); //锁必须在finally块中释放
}
《Java并发编程实践》一书给出了使用ReentrantLock的最佳时机:
当你需要以下高级特性时,才应该使用:可定时的、可轮询的与可中断的锁获取操作,公平队列,或者非块结构的锁。否则,请使用synchronized。
- Java中的显示锁ReentrantLock使用时机
- Java中的显示锁ReentrantLock使用时机
- java中的锁-Lock-ReentrantLock
- Java中的锁——重入锁ReentrantLock
- java 线程同步中的对象锁 ReentrantLock
- java中的ReentrantLock
- java中的ReentrantLock
- Java中的ReentrantLock
- java并发中的ReentrantLock
- ReentrantLock显示锁
- java多线程编程——显示锁ReentrantLock(一)
- java多线程学习8-显示锁Lock和ReentrantLock
- java并发编程-线程同步-显示锁ReentrantLock
- Java中的ReentrantLock和synchronized
- 显示锁Lock和ReentrantLock
- Java中的锁ReentrantLock,condition 与synchronized,volatile
- Java 中的锁(1)synchronized与ReentrantLock
- Java中的锁(4) 深入理解ReentrantLock
- 20141212
- 从C开始_概述_仔细瞧瞧
- Java8的lambda(1)
- IOS 获取当前设备安装的所有App
- STD:string string类总结
- Java中的显示锁ReentrantLock使用时机
- Android系统开发之触摸屏tslib移植(内核)和原理分析
- Android Wear 用于发送与同步数据的数据类型与接口概述
- STL容器(三)——对map排序
- 中水处理设备:一体化中水回用设备特点解析
- Android系统开发之tslib移植
- (二) linear discriminant analysis- part I
- 数据库技术_Orcale技术(0001)_字符串处理(截取文件名或扩展名)
- 中水处理设备:小区中水回用设备技术特点简述