【发布时间】:2014-09-28 17:44:35
【问题描述】:
我有一些类似于地图的存储空间。我一直在将synchronized(this) 用于get 和put 方法。由于此存储主要用于读取,因此我考虑使用ReentrantReadWriteLock 以获得更好的性能 - 仅锁定put。
我预计查找性能会更好(因为存储内容没有改变)。但是,我的 JMH 测试显示相反:
.benchmarkClassMap3ClassLookup thrpt 20 460.152 7.417 ops/ms
.benchmarkClassMapClassLookup thrpt 20 1196.085 23.635 ops/ms
第一行是使用ReentrantReadWriteLock 的代码。第二行是原始代码,synchronized。编辑:测试使用 2 个线程运行。
有其他人对ReentrantReadWriteLock 进行基准测试吗?结果不应该不一样吗?还是只有在多线程环境中才会出现阳性结果?
相关:this.
【问题讨论】:
-
你用什么jdk?
-
java版本“1.7.0_67”
-
虽然你的数据只是像一个地图,你考虑过ConcurrentHashMap吗?至少为了比较。
-
@JoopEggen 的性能与我的实现相同。
标签: java multithreading performance synchronization jmh