我有一些类似于地图的存储空间。我一直在使用synchronized(this)forget和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?结果不应该不一样吗?还是只有在多线程环境中才会出现阳性结果?
相关:这个。