1. 程式人生 > >zbb20180913 java thread JDK-Lock鎖

zbb20180913 java thread JDK-Lock鎖

val nal 關鍵字 cell sign wait 接口 jdk 線程安全

JDK1.5-Lock

jdk1.5 之後,並發包中新增了 Lock 接口(以及相關實現類)用來實現鎖功能,Lock 接口提供了與 synchronized 關鍵字類似的同步功能,但需要在使用時手動獲取鎖和釋放鎖。

Lock寫法

Lock lock = new ReentrantLock();

lock.lock();

try{

//可能會出現線程安全的操作

}finally{

//一定在finally中釋放鎖

//也不能把獲取鎖在try中進行,因為有可能在獲取鎖的時候拋出異常

lock.ublock();

}

Lock 接口與 synchronized 關鍵字的區別

Lock 接口可以嘗試非阻塞地獲取鎖 當前線程嘗試獲取鎖。如果這一時刻鎖沒有被其他線程獲取到,則成功獲取並持有鎖。
Lock 接口能被中斷地獲取鎖 與 synchronized 不同,獲取到鎖的線程能夠響應中斷,當獲取到的鎖的線程被中斷時,中斷異常將會被拋出,同時鎖會被釋放。

Lock 接口在指定的截止時間之前獲取鎖,如果截止時間到了依舊無法獲取鎖,則返回。

Condition用法

Condition的功能類似於在傳統的線程技術中的,Object.wait()和Object.notify()的功能。

代碼

Condition condition = lock.newCondition();

res. condition.await(); 類似wait

res. Condition. Signal() 類似notify

zbb20180913 java thread JDK-Lock鎖