我一直在使用ReadWriteLock来实现/维护一个锁定习惯用法。
自从JDK8 StampedLock被引入以来。正如RWLocks以其缓慢和糟糕的性能而闻名,StampedLock看起来像是另一种选择(它们不是可重入的,所以快得多)。
然而,除了性能之外,在我看来,StampedLock的维护和使用要困难得多,也更复杂--例如,线程现在可能会死锁--所以应该采取相应的行动。
与RWLock相比,StampedLock有哪些优势?
发布于 2015-03-08 02:40:36
这个article详细解释了其中的区别。
ReentrantReadWriteLock
有很多缺点:它饱受饥饿之苦。您无法将读锁定升级为写锁定。没有对乐观读取的支持。“了解内情”的程序员大多避免使用它们。
Doug Lea的新Java8 StampedLock解决了所有这些缺点。通过一些巧妙的代码习惯用法,我们还可以获得更好的性能。
发布于 2015-03-15 21:37:33
嗯,是的,ReentrantReadWriteLock在5.0中有问题(与传统的同步块相比),但他们在Java6.0中解决了这个问题。
因此,如果你们在生产中使用Java6,就可以放心地使用lock API。
性能智慧型锁&传统的同步给你带来了同样的好处。
lock API的好处是它使用CAS/非阻塞,所以它永远不会死锁,除非您忘记在finally块中解锁它。
https://stackoverflow.com/questions/28918004
复制相似问题