这是ReentrantLock#tryLock的源代码:
public boolean tryLock() {
return sync.nonfairTryAcquire(1);
}
我的问题是:
有两种类型的同步器:ReentrantLock中的FairSync和NonFairSync。为什么只使用NonFairSync?
答案 0 :(得分:0)
非公平意味着当准备好通过新线程获取锁时,锁不能保证谁获得锁的公平性(假设有多个线程请求锁定当时)。换句话说,可以想象一个线程可能会持续缺乏,因为其他线程总是设法任意获取锁而不是它。
公平模式更像是先来先服务,其中线程保证某种程度的公平性,以便他们以公平的方式获得锁定(例如,在开始等待的线程之前)后)。
如果Reentrant Locks公平,那么通过 Fair 的上述定义,锁定不会被赋予同一个线程,而是另一个已经等待的线程。