ReentrantLock 如何针对单独的非竞争锁获取同步执行?
假设您打算实现一个两个锁类(这意味着您需要 2 个不同的锁并且同步是不够的,就像在 LinkedBlockingQueue 中的那样),其中获取 put 和 take 锁是由说 thread1 和 thread 2(总是)完成的,这意味着锁是无争用的并且线程局部性原则出现了,ReentrantLock 如何针对同步执行(这将需要完全锁定队列)?
ReentrantLock 如何针对单独的非竞争锁获取同步执行?
假设您打算实现一个两个锁类(这意味着您需要 2 个不同的锁并且同步是不够的,就像在 LinkedBlockingQueue 中的那样),其中获取 put 和 take 锁是由说 thread1 和 thread 2(总是)完成的,这意味着锁是无争用的并且线程局部性原则出现了,ReentrantLock 如何针对同步执行(这将需要完全锁定队列)?
大多数情况下 ReentrantLock 在 3 个或更多线程竞争时获胜,但这取决于硬件、操作系统、JVM 版本及其选项。
Martin Thompson 在他的博客中发表了关于 ReentrantLock 与同步块和偏向锁定的发现:
http://mechanical-sympathy.blogspot.com/2011/11/java-lock-implementations.html
http://mechanical-sympathy.blogspot.com/2011/11/biased-locking-osr-and-benchmarking-fun.html