ReadWriteLock vs StampedLock

时间:2015-03-07 17:46:10

标签: java multithreading java-8 java.util.concurrent

我一直在使用ReadWriteLock来实现/维护锁定习语。

自JDK8引入StampedLock以来。由于RWLocks以其缓慢和糟糕的性能而闻名,因此StampedLock看起来像是一种替代品(它们不是可重入的,速度更快)。

然而,除了性能之外,我认为StampedLock的维护和使用更加困难和复杂 - 例如线程现在可以自行解锁 - 所以应该采取相应的行动。

StampedLock比RWLock有什么好处?

2 个答案:

答案 0 :(得分:5)

article解释了细节上的差异。

  

ReentrantReadWriteLock有很多缺点:它遭受了饥饿。您无法将读锁升级为写锁。没有乐观读数的支持。 “熟悉”的程序员大多避免使用它们。

     

Doug Lea的新Java 8 StampedLock解决了所有这些缺点。通过一些聪明的代码习惯,我们也可以获得更好的性能。

答案 1 :(得分:0)

嗯,是的,ReentrantReadWriteLock在5.0中遇到了问题(与传统的同步块相比),但是他们在java 6.0中修复了它。

因此,如果您在生产中使用Java 6,则可以放心使用锁定API。

性能明智锁定&传统同步为您提供了相同的功能。

关于锁API的好处在于它使用CAS /非阻塞,因此除非您忘记在finally块中解锁,否则它永远不会导致死锁。