1. 程式人生 > >lock與sychronized關鍵字

lock與sychronized關鍵字

sig 接口 進行 try condition 獲取 tro unlock 解決辦法

1. lock與sychronized關鍵字的區別

(1) Lock是一個接口,而synchronized是Java中的關鍵字,synchronized是內置的語言實現,Lock是代碼層面的實現。
(2)Lock可以選擇性的獲取鎖,如果一段時間獲取不到,可以放棄。synchronized不行,會一根筋一直獲取下去。 借助Lock的這個特性,就能夠規避死鎖,synchronized必須通過謹慎和良好的設計,才能減少死鎖的發生。
(3)synchronized在發生異常和同步塊結束的時候,會自動釋放鎖。而Lock必須手動釋放, 所以如果忘記了釋放鎖,一樣會造成死鎖(為了保證釋放的執行,往往會把unlock() 放在finally中進行)。

2. trylock方法

(1)synchronized 是不占用到手不罷休的,會一直試圖占用下去。
(2)與 synchronized 的鉆牛角尖不一樣,Lock接口還提供了一個trylock方法。trylock會在指定時間範圍內試圖占用,占成功了,就繼續。 如果時間到了,還占用不成功,扭頭就走。

3. 線程交互

(1)使用synchronized方式進行線程交互,用到的是同步對象的wait,notify和notifyAll方法
(2)Lock也提供了類似的解決辦法,首先通過lock對象得到一個Condition對象,然後分別調用這個Condition對象的:await, signal,signalAll 方法

lock與sychronized關鍵字