3
在Java中,我们可以按照如下用锁接口和ReentrantLock
类实现公平这是等待大多数持续时间被授予访问锁定。的Java Multihreading同步与锁
任何人都可以提供详细的如何JVM
保持长时间等待线程的轨道,即JVM
如何实现公平。
在Java中,我们可以按照如下用锁接口和ReentrantLock
类实现公平这是等待大多数持续时间被授予访问锁定。的Java Multihreading同步与锁
任何人都可以提供详细的如何JVM
保持长时间等待线程的轨道,即JVM
如何实现公平。
详细信息在源代码中。
:和源代码可以通过谷歌搜索可以找到代码格外好评。
简短的回答是,每个锁都有一个等待线程队列,它被实现为一个链表。
在“公平”情况下,尝试在队列非空时获取锁的线程被添加到队列末尾。
在“不公平”的情况下,如果锁定当前是空闲的,则线程可以插入。这可以提供更好的性能,因为您不需要执行需要系统调用的线程上下文切换。
*一个公平的锁是线程获得锁的顺序,他们要求它的顺序* - ReentrantLock不会使用队列吗?我看了一下源代码,'ReentrantLock'有两个静态类,它们扩展了'AbstractQueuedSynchronizer',在类上公平而另一个不公平。 –
@JonnyHenly正如你所说,它使用一个队列作为源代表。没有魔法在继续。 +1 –
@PeterLawrey Woohoo!我喜欢没错。 –