日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可中断锁

發布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可中断锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可中斷鎖:顧名思義,就是可以相應中斷的鎖。

在Java中,synchronized就不是可中斷鎖,而Lock是可中斷鎖。

如果某一線程A正在執行鎖中的代碼,另一線程B正在等待獲取該鎖,可能由于等待時間過長,線程B不想等待了,想先處理其他事情,我們可以讓它中斷自己或者在別的線程中中斷它,這種就是可中斷鎖。

在前面演示lockInterruptibly()的用法時已經體現了Lock的可中斷性。

線程在調用lock方法來獲得另一個線程所持有的鎖的時候,很可能發生阻塞。應該更加謹慎地申請鎖。tryLock方法試圖申請一個鎖,在成功獲得鎖后返回true,否則,立即返回false,而且線程可以立即離開去做其他事。

可以調用tryLock時,使用超時參數。
lock方法不能被中斷。如果一個線程在等待獲得一個鎖時被中斷,中斷線程在獲得鎖之前一直處于阻塞狀態。如果出現死鎖,那么,lock方法就無法終止。

API介紹:
Lock接口
1、tryLock
boolean tryLock()
僅在調用時鎖為空閑狀態才獲取該鎖。 ?
如果鎖可用,則獲取鎖,并立即返回值 true。如果鎖不可用,則此方法將立即返回值 false。

此方法的典型使用語句如下:

??????Lock?lock?=?...;??????if?(lock.tryLock())?{??????????try?{//?manipulate?protected?state}?finally?{lock.unlock();}}?else?{//?perform?alternative?actions}12345678910

此用法可確保如果獲取了鎖,則會釋放鎖,如果未獲取鎖,則不會試圖將其釋放。

返回:
如果獲取了鎖,則返回 true;否則返回 false。

2、tryLock
boolean tryLock(long time,
? ? ? ? ? ? ? ?TimeUnit unit)
? ? ? ? ? ? ? ?throws InterruptedException
如果鎖在給定的等待時間內空閑,并且當前線程未被中斷,則獲取鎖。 ?
如果鎖可用,則此方法將立即返回值 true。如果鎖不可用,出于線程調度目的,將禁用當前線程,并且在發生以下三種情況之一前,該線程將一直處于休眠狀態:

鎖由當前線程獲得;或者 ?
其他某個線程中斷當前線程,并且支持對鎖獲取的中斷;或者 ?
已超過指定的等待時間 ?
如果獲得了鎖,則返回值 true。

如果當前線程:

在進入此方法時已經設置了該線程的中斷狀態;或者 ?
在獲取鎖時被中斷,并且支持對鎖獲取的中斷, ?
則將拋出 InterruptedException,并會清除當前線程的已中斷狀態。 ?
如果超過了指定的等待時間,則將返回值 false。如果 time 小于等于 0,該方法將完全不等待。

實現注意事項

在某些實現中可能無法中斷鎖獲取,即使可能,該操作的開銷也很大。程序員應該知道可能會發生這種情況。在這種情況下,該實現應該對此進行記錄。

相對于普通方法返回而言,實現可能更喜歡響應某個中斷,或者報告出現超時情況。

Lock 實現可能可以檢測鎖的錯誤用法,例如,某個調用可能導致死鎖,在特定的環境中可能拋出(未經檢查的)異常。該 Lock 實現必須對環境和異常類型進行記錄。

參數:
time - 等待鎖的最長時間
unit - time 參數的時間單位 ?
返回:
如果獲得了鎖,則返回 true;如果在獲取鎖前超過了等待時間,則返回 false ?
拋出: ?
InterruptedException - 如果在獲取鎖時,當前線程被中斷(并且支持對鎖獲取的中斷)

3、lockInterruptibly
void lockInterruptibly()
? ? ? ? ? ? ? ? ? ? ? throws InterruptedException
如果當前線程未被中斷,則獲取鎖。 ?
如果鎖可用,則獲取鎖,并立即返回。

如果鎖不可用,出于線程調度目的,將禁用當前線程,并且在發生以下兩種情況之一以前,該線程將一直處于休眠狀態:

鎖由當前線程獲得;或者 ?
其他某個線程中斷當前線程,并且支持對鎖獲取的中斷。 ?
如果當前線程:

在進入此方法時已經設置了該線程的中斷狀態;或者 ?
在獲取鎖時被中斷,并且支持對鎖獲取的中斷, ?
則將拋出 InterruptedException,并清除當前線程的已中斷狀態。 ?
實現注意事項

在某些實現中可能無法中斷鎖獲取,即使可能,該操作的開銷也很大。程序員應該知道可能會發生這種情況。在這種情況下,該實現應該對此進行記錄。

相對于普通方法返回而言,實現可能更喜歡響應某個中斷。

Lock 實現可能可以檢測鎖的錯誤用法,例如,某個調用可能導致死鎖,在特定的環境中可能拋出(未經檢查的)異常。該 Lock 實現必須對環境和異常類型進行記錄。

拋出: ?
InterruptedException - 如果在獲取鎖時,當前線程被中斷(并且支持對鎖獲取的中斷)。

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的可中断锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。