Java语言synchronized
关键字自带了一个内置的隐性锁(implicit lock),使用起来方便简单,但是内置锁一旦使用,则会强制将某个代码块加锁或者解锁,而且内置锁并不支持可中断的获取锁。从Java5.0开始,提供了一个并发工具包java.util.concurrent.*
,实现了显性锁(explicit lock)ReentrantLock
(可重入锁,可多次获取同一个锁);ReentrantLock
实现了与synchronized
一样的功能,确保并发过程中数据的互斥访问与可见性。获取ReentrantLock
相当于进入一个synchronized
代码块,而释放ReentrantLock
则相当于从一个synchronized
代码块退出。ReentrantLock
实现了如下Lock.java
接口:
1 |
|