JUC:ReentrantLock
ReentrantLock:
-
互斥:保证共享资源的原子性;
-
同步:使用条件变量来达到线程通信【wait-notify】;
-
相对于synchronized锁它具备以下特点:
-
可中断;
-
可设置超时时间
-
可以设置公平锁
-
支持多个条件变量:
reentrantLock.lock(); try{ //临界区 }finally{ reentrantLock.unlock(); } -
可重入【均可】:
-
可中断【不用一直等待WaitSet】
- wait方法是不可打断的阻塞等待;
- 被动防止死锁;
- reentrantLock.lockInterruptibly()方法可以配合interrupt()使用,通过捕获异常的方式被中断;
-
锁超时:
- 主动防止死锁;
- tryLock()方法可中断,可传入等待时间;
-
公平锁:
- 不公平:所有的人一起抢锁;
- 公平锁:按照先入先得,构造方法设置true;
-
条件变量:
-
synchronized中进入WaitSet阻塞等待;
-
而ReentrantLock有很多这种小房间;
Condition condition1 = lock.newCondition(); Condition condition2 = lock.newCondition(); lock.lock(); condition1.wait(); condition1.signal(); condition1.signalAll();
-
-

浙公网安备 33010602011771号