多個執行緒按照申請鎖的順序去獲得鎖,執行緒會直接進入佇列去排隊,永遠都是佇列的第一位才能得到鎖。
優點所有的執行緒都能得到資源,不會餓死在佇列中。
缺點吞吐量會下降很多,佇列裡面除了第乙個執行緒,其他的執行緒都會阻塞,cpu喚醒阻塞執行緒的開銷會很大。
多個執行緒去獲取鎖的時候,會直接去嘗試獲取,獲取不到,再去進入等待佇列,如果能獲取到,就直接獲取到鎖。
優點可以減少cpu喚醒執行緒的開銷,整體的吞吐效率會高點,cpu也不必喚醒所有執行緒,會減少喚起執行緒的數量。
缺點可能導致佇列中間的執行緒一直獲取不到鎖或者長時間獲取不到鎖,導致餓死。
公平鎖和非公平鎖
公平鎖和非公平鎖的不同是發生在乙個新的執行緒搶占乙個鎖的情況下。1.對於非公平鎖,當乙個新的執行緒想要得到乙個鎖,而這時鎖恰好沒有被別的執行緒占有,那麼這時候這個新的執行緒就可以無視其他執行緒在等待佇列中的排隊,而直接獲取這個鎖,而且不用先加入等待佇列。2,公平鎖,就是乙個新的執行緒想要得到乙個鎖,...
公平鎖和非公平鎖
所謂公平鎖指的是哪個執行緒先執行,那就可以先得到鎖。非公平鎖是不管執行緒是否是先執行,上來就直接嘗試占有鎖,如果嘗試失敗,就再採用類似公平鎖那種方式。我們看下reentrantlock 類的原始碼 公平鎖 protected final boolean tryacquire int acquires...
公平鎖和非公平鎖
三 reentrantlock非公平鎖 三 reentrantlock公平鎖 有個小夥伴最近諮詢我,前段時間他被面試官問了synchronized是公平鎖還是非公平鎖?當時就矇圈了,最後面試結果可想而知,今天我們就用乙個通俗的案例加上 來說明公平鎖和非公平鎖。其實公平鎖這個概念是juc工具包才有的,...