天天看點

Reentrantlock簡介及使用場景

Reentrantlock簡介

1.Reentrantlock是并發包中一個可重入的鎖
    是基于AQS(AbstractQueuedSynchronized)實作
    它有公平鎖和不公平鎖兩種實作方式
 
  2.Reentranlock中有一個内部抽象類Sync繼承自AbstractQueuedSynchronized
      主要是它來實作鎖的功能
     Sync在ReentrantLock中有兩種實作類
      NonfairSync、FairSync
     正好對應了ReentrantLock的非公平鎖、公平鎖兩大類型
     Reentranlock 預設實作為非公平鎖
     在高競争的條件下有更好的性能      

ReentrantLock的使用場景

1.檢測有操作在運作,則不運作指定代碼塊(可避免并發競争) 
    如:在定時任務時,當任務執行時間可能超過下次計劃執行時間,確定該任務隻有一個正在執行,忽略重複觸發。

 2.當該操作已經在執行,則等待一個個執行(同步執行,與synchronized相似)

 3.當該操作已經在執行,則嘗試等待一段時間,逾時則放棄執行
     等待獲得鎖的操作有一個時間的限制
       如果逾時則放棄執行,用來防止由于資源處理不當長時間占用導緻死鎖情況

 4.當發現該操作已經在執行,等待執行,此時可中斷正在進行的操作立刻釋放鎖繼續下一操作
     synchronized與Lock在預設情況下是不會響應中斷(interrupt)操作
     會繼續執行完
     Reentranlock中的lockInterruptibly()方法提供了可中斷鎖來解決此問題      

繼續閱讀