ReentrantReadWriteLock 读写锁分离

发布于 2024-06-06 04:04:20 字数 669 浏览 14 评论 0

ReentrantReadWriteLock 提供了读锁(ReadLock)和写锁(WriteLock),相比 ReentrantLock 只有一把锁,读写锁分离可以在读多写少的场景中提升读的性能。

获得锁的机制

当调用读锁的 lock 方法

如果没有线程持有写锁,就可获得读锁。

当调用写锁的 lock 方法

如果没有线程持有读锁或写锁,可继续执行。如果有其他线程在读或在写,就会被阻塞,所以写的性能一般比较差。因为很多时候都至少有其他线程在读。

锁升降级机制

  • 同一线程中,持有读锁后,不能直接调用写锁的 lock 方法
  • 同一线程中,持有写锁后,可调用读锁的 lock 方法。之后如果调用写锁的 unlock 方法,当前锁将降级为读锁。

即读锁不能升为写锁,写锁可以降级为读锁。

ReentrantReadWriteLock 的性能提升

测试场景为同时启动 1000 个线程,其中 900 个进行读操作,100 个进行写操作。

ReentrantReadWriteLock 用时 10s,ReentrantLock 用时 100s。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

萤火眠眠

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文