ReentrantLock與synchronized
阿新 • • 發佈:2018-04-19
操作 pan 決定 變量 HR 功能 編碼 運行 部分
相同:ReentrantLock提供了synchronized類似的功能和內存語義。
不同:
1.ReentrantLock功能性方面更全面,比如時間鎖等候,可中斷鎖等候,鎖投票等,因此更有擴展性。在多個條件變量和高度競爭鎖的地方,用ReentrantLock更合適,ReentrantLock還提供了Condition,對線程的等待和喚醒等操作更加靈活,一個ReentrantLock可以有多個Condition實例,所以更有擴展性。
2.ReentrantLock必須在finally中釋放鎖,否則後果很嚴重,編碼角度來說使用synchronized更加簡單,不容易遺漏或者出錯。
3.ReentrantLock 的性能比synchronized會好點。
4.ReentrantLock提供了可輪詢的鎖請求,他可以嘗試的去取得鎖,如果取得成功則繼續處理,取得不成功,可以等下次運行的時候處理,所以不容易產生死鎖,而synchronized則一旦進入鎖請求要麽成功,要麽一直阻塞,所以更容易產生死鎖。
5、Lock的某些方法可以決定多長時間內嘗試獲取鎖,如果獲取不到就拋異常,這樣就可以一定程度上減輕死鎖的可能性。
如果鎖被另一個線程占據了,synchronized只會一直等待,很容易錯序死鎖
6、synchronized的話,鎖的範圍是整個方法或synchronized塊部分;而Lock因為是方法調用,可以跨方法,靈活性更大
7、便於測試,單元測試時,可以模擬Lock,確定是否獲得了鎖,而synchronized就沒辦法了
ReentrantLock與synchronized