这是ReentrantLock#tryLock的源代码:
public boolean tryLock() {
return sync.nonfairTryAcquire(1);
} 我的问题是:
ReentrantLock中有两种类型的同步器: FairSync和NonFairSync。为什么只使用NonFairSync?
发布于 2017-10-08 19:47:21
非公平意味着当锁准备好被新线程获得时,锁不保证谁获得锁的公平性(假设此时有多个线程请求锁)。换句话说,可以想象,一个线程可能会持续饥饿,因为其他线程总是设法任意获得锁,而不是它。
公平锁模式的行为更像是先来先服务,其中线程被保证一定程度的公平性,它们将以公平的方式获得锁(例如,在线程开始等待很长时间之后)。
如果重入锁是公平的,那么根据上面对公平的定义,锁不会被分配给同一个线程,而是一直在等待的另一个线程。
https://stackoverflow.com/questions/46629387
复制相似问题