這幾個方法都是 Lock 接口中定義的:
1)lock()
獲取鎖,有如下三種狀況:
鎖空閒:直接獲取鎖並返回,同時設置鎖持有者數量爲:1;
當前線程持有鎖:直接獲取鎖並返回,同時鎖持有者數量遞增1;
其餘線程持有鎖:當前線程會休眠等待,直至獲取鎖爲止;
2)lockInterruptibly()
獲取鎖,邏輯和 lock() 方法同樣,但這個方法在獲取鎖過程當中能響應中斷。
3)tryLock()
從關鍵字字面理解,這是在嘗試獲取鎖,獲取成功返回:true,獲取失敗返回:false, 這個方法不會等待,有如下三種狀況:
鎖空閒:直接獲取鎖並返回:true,同時設置鎖持有者數量爲:1;
當前線程持有鎖:直接獲取鎖並返回:true,同時鎖持有者數量遞增1;
其餘線程持有鎖:獲取鎖失敗,返回:false;
4)tryLock(long timeout, TimeUnit unit)
邏輯和 tryLock() 差很少,只是這個方法是帶時間的。
5)unlock()
釋放鎖,每次鎖持有者數量遞減 1,直到 0 爲止。因此,如今知道爲何 lock 多少次,就要對應 unlock 多少次了吧。
6)newCondition
返回一個這個鎖的 Condition 實例,能夠實現 synchronized 關鍵字相似 wait/ notify 實現多線程通訊的功能,不過這個比 wait/ notify 要更靈活,更強大!多線程