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()方法提供了可中斷鎖來解決此問題