ReentrantReadWriteLock 读写锁分离
ReentrantReadWriteLock 提供了读锁(ReadLock)和写锁(WriteLock),相比 ReentrantLock 只有一把锁,读写锁分离可以在读多写少的场景中提升读的性能。
获得锁的机制
当调用读锁的 lock 方法
如果没有线程持有写锁,就可获得读锁。
当调用写锁的 lock 方法
如果没有线程持有读锁或写锁,可继续执行。如果有其他线程在读或在写,就会被阻塞,所以写的性能一般比较差。因为很多时候都至少有其他线程在读。
锁升降级机制
- 同一线程中,持有读锁后,不能直接调用写锁的 lock 方法
- 同一线程中,持有写锁后,可调用读锁的 lock 方法。之后如果调用写锁的 unlock 方法,当前锁将降级为读锁。
即读锁不能升为写锁,写锁可以降级为读锁。
ReentrantReadWriteLock 的性能提升
测试场景为同时启动 1000 个线程,其中 900 个进行读操作,100 个进行写操作。
ReentrantReadWriteLock 用时 10s,ReentrantLock 用时 100s。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Java Thread 线程
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论