zbb20180913 java thread JDK-Lock鎖
阿新 • • 發佈:2018-09-14
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鎖