語言

ReentrantLock.LockInterruptibly 方法

定義

除非目前執行緒被 Thread#interrupt 中斷,否則會取得鎖。

[Android.Runtime.Register("lockInterruptibly", "()V", "GetLockInterruptiblyHandler")]
public virtual void LockInterruptibly();
[<Android.Runtime.Register("lockInterruptibly", "()V", "GetLockInterruptiblyHandler")>]
abstract member LockInterruptibly : unit -> unit
override this.LockInterruptibly : unit -> unit

實作

屬性

例外狀況

如果目前執行緒被中斷

備註

除非目前執行緒被 Thread#interrupt 中斷,否則會取得鎖。

若鎖未被其他執行緒持有,則取得該鎖並立即返回,並將鎖保持次數設為一。

如果目前執行緒已經持有此鎖,則保持次數會增加一,方法會立即回傳。

若鎖被其他執行緒持有,則當前執行緒將因執行緒排程而被停用,並處於休眠狀態,直到以下兩種情況之一發生:

<UL>

<li>鎖由當前執行緒取得;或

<li>某個其他執行緒 Thread#interrupt 會中斷目前執行緒。

</ul>

若鎖定由當前執行緒取得,則鎖定保持次數設為一。

如果目前的討論串:

<UL>

<LI>在其進入此方法時設定為中斷狀態;或

<li>是在取得鎖時被 Thread#interrupt 中斷,

</ul>

接著 InterruptedException 拋出,當前執行緒的中斷狀態被清除。

在此實作中,由於此方法為明確的中斷點,優先回應中斷而非正常或重入鎖定。

的 java.util.concurrent.locks.ReentrantLock.lockInterruptibly()Java 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於