2017-10-08 52 views
0

這是的ReentrantLock#的tryLock的源代碼:的ReentrantLock的tryLock()

public boolean tryLock() { 
     return sync.nonfairTryAcquire(1); 
} 

我的問題是:
有兩種類型的同步器:FairSync和NonFairSync在ReentrantLock的。爲什麼只使用NonFairSync?

回答

0

不公平意味着,當準備好通過新線程獲得鎖時,鎖不能保證誰獲得鎖的公平性(假設當時有多個線程請求鎖) 。換句話說,可以想象,一個線程可能會持續餓死,因爲其他線程總是設法任意獲取鎖而不是它。

公平公平模式更像先來先服務,其中線程保證某種程度的公平,以公平的方式獲得鎖定(例如,在開始等待很久的線程之前)。

如果可重入鎖定是公平的,那麼通過公平的上述定義,鎖定不會被賦予同一個線程,而是等待的另一個線程。