Java并发(8)- 读写锁中的性能之王:StampedLock (4)

看完了上面的测试,前面3种场景表现最好的都为StampedLock,但第4种情况下StampedLock表现很差,于是我自己对代码又进行了一遍测试,同时鉴于读写锁的大量应用在缓存场景下,读写差距极大,我增加了100个读和1个写的场景。

测试机器:MAC OS(10.12.6),CPU : 2.4 GHz Intel Core i5,内存:8G 软件版本:JDK1.8
测试结果如下:
19个读线程和1个写线程场景:表现最好的是StampedLock以及Synchronized。
读线程: 19. 写线程: 1. 循环次数: 5. 计算总和: 1000000

Java并发(8)- 读写锁中的性能之王:StampedLock


100个读线程和1个写线程场景:表现最好的是StampedLock以及Synchronized。
读线程: 100. 写线程: 1. 循环次数: 5. 计算总和: 100000

Java并发(8)- 读写锁中的性能之王:StampedLock


通过上述测试,可以发现整体性能平均而言StampedLock和Synchronized相差不大,StampedLock在读写差距加大时稍微有点优势。而ReentrantReadWriteLock性能之差有点出乎意料,基本可以达到抛弃使用的地步了,不知道大家对ReentrantReadWriteLock的使用场景有什么建议?

同时鉴于原生的Synchronized后期可优化空间比较大,而且在代码复杂性以及安全性上面都具有一定优势,因此在绝大多数场景可以使用Synchronized来进行同步,对性能有一定要求的在某些特定场景下可以使用StampedLock。测试所用代码在我所引用的博客中都可以找到,大家可以自行尝试测试,如果对结果有什么疑问,欢迎在评论中提出。

参考资料:
https://blog.takipi.com/java-8-stampedlocks-vs-readwritelocks-and-synchronized/

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydggf.html