公平鎖和非公平鎖

2021-08-07 11:40:52 字數 714 閱讀 1761

所謂公平鎖指的是哪個執行緒先執行,那就可以先得到鎖。

非公平鎖是不管執行緒是否是先執行,上來就直接嘗試占有鎖,如果嘗試失敗,就再採用類似公平鎖那種方式。

我們看下reentrantlock 類的原始碼:

公平鎖**:

protected

final

boolean

tryacquire(int acquires)

}//判斷當前獲得鎖的執行緒是否為自己,這裡體現出了 可重入鎖的機制

else

if (current == getexclusiveownerthread())

return

false;

}

非公平鎖**:

/**

* performs non-fair trylock. tryacquire is implemented in

* subclasses, but both need nonfair try for trylock method.

*/final

boolean nonfairtryacquire(int acquires)

}else

if (current == getexclusiveownerthread())

return

false;

}

公平鎖和非公平鎖

公平鎖和非公平鎖的不同是發生在乙個新的執行緒搶占乙個鎖的情況下。1.對於非公平鎖,當乙個新的執行緒想要得到乙個鎖,而這時鎖恰好沒有被別的執行緒占有,那麼這時候這個新的執行緒就可以無視其他執行緒在等待佇列中的排隊,而直接獲取這個鎖,而且不用先加入等待佇列。2,公平鎖,就是乙個新的執行緒想要得到乙個鎖,...

公平鎖和非公平鎖

三 reentrantlock非公平鎖 三 reentrantlock公平鎖 有個小夥伴最近諮詢我,前段時間他被面試官問了synchronized是公平鎖還是非公平鎖?當時就矇圈了,最後面試結果可想而知,今天我們就用乙個通俗的案例加上 來說明公平鎖和非公平鎖。其實公平鎖這個概念是juc工具包才有的,...

公平鎖與非公平鎖

在reentrantlock中很明顯可以看到其中同步包括兩種,分別是公平的fairsync和非公平的nonfairsync。公平鎖的作用就是嚴格按照執行緒啟動的順序來執行的,不允許其他執行緒插隊執行的 而非公平鎖是允許插隊的。預設情況下reentrantlock是通過非公平鎖來進行同步的,包括syn...