天天看點

公平鎖與非公平鎖

@[toc]

鎖的分類

公平鎖與非公平鎖

什麼是公平 與 非公平

  • 公平是按照線程的請求順序,來配置設定鎖 非公平是指不完全按照請求的順序,在一定情況下,可以插隊的

注意:非公平也同樣不提倡 插隊行為,這裡的非公平是指在合适的時機插隊,而不是盲目的插隊

為什麼要有非公平鎖

  • ava設計者 這樣設計的目的,是為了提高效率

    避免喚醒帶來的空檔期

公平的情況 ReentrantLock

如果建立 ReentrantLock對象時,參數填寫為 true ,那麼這就是個公平鎖 依次執行
公平鎖與非公平鎖
公平鎖與非公平鎖
  • 我們可以看下ReentrantLock 源碼 官方的解釋是當為true的時候 就是公平政策

    是個三母運算符 為 true則建立個 FairSync()方法

公平鎖與非公平鎖
  • ync object for fair locks 公平鎖的同步對象 方法繼承了 extends Sync
  • 并且 在 if判斷中,他會先擷取下排隊的線程

不公平的情況 ReentrantLock

線程1 擷取鎖,釋放鎖,線程2在排隊等待擷取鎖,但是線程5 突然插隊拿到鎖,這就是非公平鎖,線程2還沒來得及擷取鎖,

ReentrantLock 預設的就是非公平政策

通過源碼可以發現

公平鎖與非公平鎖

三目 預設走的是false ,非公平鎖政策

公平鎖與非公平鎖
公平鎖與非公平鎖
  • 公平鎖不同的是 ,他不會擷取正在排隊的線程

對比公平鎖,非公平鎖的優點和缺點

公平鎖與非公平鎖