ReentrantReadWriteLock.ReentrantWriteLock.TryLock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
TryLock() |
只有在叫用時未由另一個線程保留寫入鎖定時,才會取得寫入鎖定。 |
TryLock(Int64, TimeUnit) |
如果指定的等候時間內沒有由另一個線程保留,且目前線程尚未中斷 Thread#interrupt,則取得寫入鎖定。 |
TryLock()
只有在叫用時未由另一個線程保留寫入鎖定時,才會取得寫入鎖定。
[Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")]
public virtual bool TryLock();
[<Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")>]
abstract member TryLock : unit -> bool
override this.TryLock : unit -> bool
傳回
true
如果鎖定為可用且由目前線程取得,或目前線程已持有寫入鎖定,則為 ;否則 false
為 。
實作
- 屬性
備註
只有在叫用時未由另一個線程保留寫入鎖定時,才會取得寫入鎖定。
如果讀取或寫入鎖定不是由另一個線程持有,而且會立即傳回值 true
,將寫入鎖定保留計數設定為一個,則取得寫入鎖定。 即使此鎖定已設定為使用公平排序原則,tryLock()
<呼叫 em>will/em> 會<立即取得鎖定,如果有的話,無論其他線程目前是否正在等候寫入鎖定。 這個和商號;barging”行為在某些情況下可能很有用,即使它打破公平性也一樣。 如果您想要接受此鎖定的公平性設定,請使用 #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS)
幾乎相等的設定(它也會偵測到中斷)。
如果目前的線程已經保留此鎖定,則保留計數會遞增一個,而且 方法會傳 true
回 。
如果鎖定由另一個線程保留,則這個方法會立即傳回 值 false
。
的 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock()
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
TryLock(Int64, TimeUnit)
如果指定的等候時間內沒有由另一個線程保留,且目前線程尚未中斷 Thread#interrupt,則取得寫入鎖定。
[Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryLock(long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
參數
- timeout
- Int64
等候寫入鎖定的時間
- unit
- TimeUnit
timeout 自變數的時間單位
傳回
true
如果鎖定為可用且由目前線程取得,或目前線程已持有寫入鎖定,則為 ;如果 false
可以取得鎖定之前經過的等候時間,則為 。
實作
- 屬性
例外狀況
如果目前線程中斷,則為
如果時間單位為 Null,則為
備註
如果指定的等候時間內沒有由另一個線程保留,且目前線程尚未中斷 Thread#interrupt,則取得寫入鎖定。
如果讀取或寫入鎖定不是由另一個線程持有,而且會立即傳回值 true
,將寫入鎖定保留計數設定為一個,則取得寫入鎖定。 如果此鎖定已設定為使用公平排序原則,則如果任何其他線程正在等候寫入鎖定,將無法/em 取得可用的鎖定 <em>>。< 這與 #tryLock()
方法相反。 如果您想要允許在公平鎖定上進行封鎖的計時, tryLock
則將計時和未計時的表單結合在一起:
{@code
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
}}
如果目前的線程已經保留此鎖定,則保留計數會遞增一個,而且 方法會傳 true
回 。
如果鎖定由另一個線程保留,則目前的線程會因線程排程目的而停用,並處於休眠狀態,直到發生下列三件事之一:
<ul>
<li>目前線程會取得寫入鎖定;或
<li>其他線程 Thread#interrupt 會中斷目前的線程;或
<li>指定的等候時間經過
</ul>
如果取得寫入鎖定,則會傳回值 true
,並將寫入鎖定保留計數設定為一個。
如果目前的線程:
<ul>
<li>在此方法的輸入時,其中斷狀態設定為 ;或
<li>是線程#中斷在取得寫入鎖定時中斷,
</ul>
接著 InterruptedException
會擲回 ,並清除目前線程的中斷狀態。
如果指定的等候時間經過,則會傳回值 false
。 如果時間小於或等於零,則方法完全不會等候。
在此實作中,由於此方法是明確的中斷點,因此偏好響應中斷,或重新進入鎖定的擷取,以及報告等候時間的經過。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。