java併發鎖之Lock


              寫這篇文章的主要目的是記錄,如果能幫到一些人那也是及好的。


             

JDK1.5在併發包java.util.concurrent.locks中增加了新的併發編程接口Lock(以及相關實現類)Lock提供了與synchronized關鍵字類似的同步功能,但需要在使用時手動獲取和釋放鎖。

 

Lock相關接口:

 

l void lock(): 獲取鎖,調用該方法當前線程將會獲取鎖,當鎖獲取後,該方法將返回。

 

l void lockInterruptibly():可中斷獲取鎖,與lock()方法不同之處在於該方法會響應中斷,即在鎖的獲取過程中可以中斷當前線程

 

l boolean tryLock():嘗試非阻塞的方式獲取鎖,調用該方法立即返回,獲取到鎖返回true

 

l boolean tryLock(long time, TimeUnit unit):超時獲取鎖,以下情況會返回:時間內獲取到了鎖,時間內被中斷,時間到了沒有獲取到鎖。

 

l unlock():釋放鎖。

 

ReentrantLock

 

ReentrantLock有兩種實現方式,公平鎖和非公平鎖。默認使用的是非公平鎖。它也是可重入鎖。

 

可重入鎖:一線程外層函數獲得鎖之後,內層遞歸函數仍然有獲取該鎖的代碼,但不受影響。

 

公平鎖與非公平鎖:

 

公平鎖:按獲取鎖的先後順序,誰先獲取鎖,誰先得到鎖。

 

非公平鎖:不管前面是否有人等待獲取鎖先獲取鎖,如果未獲取到鎖則和公平鎖一樣加入等待列表,先到先得。它的效率相對來說更高。

 

Lock鎖使用方法:1. 定義一個Lock對象, 2. 繼承ReentrantLock

 

Lock相關類的類圖


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章