知识卡片
读写锁看比例
内容
ReentrantReadWriteLock 适合读多写少:读锁是共享锁,多个读线程可同时持有;写锁是排他锁,且读写锁之间也互斥——写线程要等所有读线程释放,新读线程也要等写锁释放。它提高吞吐的前提是读远多于写,让原本串行化的并发读并行起来;写频繁时收益迅速下降,更值得考虑 [[乐观读必须验证快照]] 的 StampedLock。
参考来源
- 位置:《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》第5章《JUC显式锁的原理与实战》5.6.1节《读写锁ReentrantReadWriteLock》(源文件:_epub-src/OEBPS/Text/chapter179.xhtml)
- 结论依据:原文说明“它的读锁是可以多线程共享的共享锁,而它的写锁是排他锁……然而其读锁和写锁之间是有关系的:同一时刻不允许读锁和写锁同时被抢占,二者之间是互斥的”,并用4读2写线程的演示结果证明多个读线程能同时获取读锁、写线程必须依次获取写锁、读线程需等待写锁释放,因此推出本卡结论。
- 原始内容:它的读锁是可以多线程共享的共享锁,而它的写锁是排他锁,在被占时不允许其他线程再抢占操作。然而其读锁和写锁之间是有关系的:同一时刻不允许读锁和写锁同时被抢占,二者之间是互斥的……读线程3必须等待写线程1释放写锁后才能获取到读锁,说明读写操作是互斥的。