本教學操作環境:windows7系統、java10版,DELL G3電腦。
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介面大家都不陌生,我們已經初步對概念進行了理解。那麼在取得鎖的方法上想必還不是很清楚。
以上就是java中lock獲取鎖的四種方法,大家看完文章後可以加強這方面的記憶和理解,對其它獲取鎖定方法感興趣的,也可以在課後找尋相關代碼進行練習。