首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReentrantReadWriteLock读锁的性能?

ReentrantReadWriteLock读锁的性能?
EN

Stack Overflow用户
提问于 2014-09-28 17:44:35
回答 1查看 4.6K关注 0票数 3

我有一些类似地图的存储器。我一直在使用synchronized(this)来实现getput方法。由于这个存储主要用于阅读,所以我想使用ReentrantReadWriteLock来获得更好的性能--只锁定put

我期望在查找方面有更好的性能(因为存储内容没有改变)。然而,我的JMH测试结果正好相反:

代码语言:javascript
复制
.benchmarkClassMap3ClassLookup    thrpt       20    460.152        7.417  ops/ms
.benchmarkClassMapClassLookup     thrpt       20   1196.085       23.635  ops/ms

第一行是使用ReentrantReadWriteLock的代码。第二行是使用synchronized的原始代码。编辑:测试用两个线程运行。

还有其他人以ReentrantReadWriteLock为基准吗?结果不应该不同吗?还是只有在多线程环境中才会出现积极的结果?

相关:.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-28 18:07:03

您需要一定的多线程才能看到好处,因为ReentrantReadWriteLock比简单的synchronized要复杂得多。在synchronized的情况下,如果它看到只有一个线程,它可能会一起优化和删除同步。但是这里还有一个来自ReentrantReadWriteLock javadoc的引用:

ReentrantReadWriteLocks可用于提高某些集合的某些用途的并发性。这通常是值得的,只有当集合预计很大时,被更多的读取器线程访问,而不是写入线程,并且需要比同步开销更重的操作。

如果您愿意迁移到Java8,那么您可以用这个版本附带的新的ReentrantReadWriteLock来代替StampedLock。有关一个简短的示例和好处,请参见这个答案

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26087738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档