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中文網其他相關文章!