ReentrantReadWriteLock

将锁分为
读锁写锁
旨在在读多写少的场景下提升并发性能
实现读读共享、读写互斥、写写互斥。
注意事项

1.读锁不支持条件变量
2.重入时不能升级锁(有读锁不能获取写锁, 否则会导致永久等待)

3.重入时可以降级锁(有写锁时, 可以获得读锁)

Rwl.readLock.unlock() //必须先把读锁释放掉才能拿写锁

Rwl.writeLock.lock()

Try{

} finally{

//Rwl.readLock.lock() 可以有选择地降级为读锁, 然后释放写锁

Rwl.writeLock.unlock()

}

应用

原理

image1

读读可以并发: share节点会被连着唤醒, 直到遇到一个独占节点为止