1. 读写锁 ReentrantReadWriteLock 的用法
- 读写锁对象生成之后,内部会存在两个锁,读锁和写锁
public ReentrantReadWriteLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
readerLock = new ReadLock(this);
writerLock = new WriteLock(this);
}
- 读锁是共享锁,同时被多个线程都获取
- 写锁是排他锁,同时只能被一个线程获取
- 读锁与写锁互斥(一个线程不能同时拥有锁对象的读锁和写锁)
- 写锁能够降级为读写,读锁无法升级为写锁
2.reentrantLock的condition
-
流程图
image.png
condition的的
- await() 把aqs中的阻塞队列(CHL)的node节点转移到condition的单向队列中
- signal 把condition的单向队列转移到aqs的阻塞队列中
网友评论