首頁 >Java >java教程 >java中lock取得鎖定的方法有哪些

java中lock取得鎖定的方法有哪些

王林
王林轉載
2023-05-19 13:13:062046瀏覽

1.取得方法

lock()、tryLock()、tryLock(long time, TimeUnit unit) 和 lockInterruptibly()都是用來取得鎖的。

(1)lock()方法是平常使用得最多的一個方法,就是用來取得鎖定。如果鎖已被其他線程獲取,則進行等待。

(2)tryLock()方法是有回傳值的,它表示用來嘗試取得鎖定,如果取得成功,則傳回true,如果取得失敗(即鎖定已被其他線程獲取),則回傳false,也就說這個方法無論如何都會立即返回。在拿不到鎖時不會一直在那裡等待。

(3)tryLock(long time, TimeUnit unit)方法和tryLock()方法是類似的,只不過差別在於這個方法在拿不到鎖時會等待一定的時間 ,在時間期限之內如果還拿不​​到鎖,就回傳false。如果如果一開始拿到鎖或在等待期間內拿到了鎖,則傳回true。

(4)lockInterruptibly()方法比較特殊,當透過這個方法去取得鎖定時,如果執行緒正在等待取得鎖,則這個執行緒能夠回應中斷,即中斷執行緒的等待狀態。 也就使說,當兩個執行緒同時透過lock.lockInterruptibly()想取得某個鎖時,假若此時執行緒A取得到了鎖,而執行緒B只有在等待,那麼對執行緒B呼叫threadB.interrupt ()方法能夠中斷線程B的等待過程。

2.實例

以trylock為例。

Lock lock = ...;
if(lock.tryLock()) {
     try{
         //处理任务
     }catch(Exception ex){
         
     }finally{
         lock.unlock();   //释放锁
     }
}else {
    //如果不能获取锁,则直接做其他事情
}

以上是java中lock取得鎖定的方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除