ReentrantReadWriteLock.ReentrantWriteLock.TryLock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| TryLock() |
只有在呼叫時未被其他執行緒持有時,才會取得寫入鎖。 |
| TryLock(Int64, TimeUnit) |
若在指定等待時間內未被其他執行緒持有寫入鎖,且當前執行緒尚未被執行緒#中斷,則會取得寫入鎖。 |
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><> 也會立即取得該鎖(若有可用),不論其他執行緒是否正在等待寫入鎖。 這個 ”駁船”在某些情況下,行為有時仍可能有用,儘管它違反了公平。 如果你想尊重這個鎖的公平設定,那就用 #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS) 它幾乎等同(它也能偵測中斷)。
若目前執行緒已持有此鎖,則保持次數增加一,方法回傳 true。
若鎖由另一執行緒持有,則此方法會立即返回 ,並返回值 false。
Java 文件 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock()。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
TryLock(Int64, TimeUnit)
若在指定等待時間內未被其他執行緒持有寫入鎖,且當前執行緒尚未被執行緒#中斷,則會取得寫入鎖。
[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
超時論證的時間單位
傳回
true 如果該鎖是空閒且已被當前執行緒取得,或寫入鎖已被當前執行緒持有;以及 false 是否等待時間過後才能取得鎖具。
實作
- 屬性
例外狀況
如果目前執行緒被中斷
若時間單位為零
備註
若在指定等待時間內未被其他執行緒持有寫入鎖,且當前執行緒尚未被執行緒#中斷,則會取得寫入鎖。
若其他執行緒未持有讀寫鎖,則取得寫入鎖,並立即返回值 true,將寫入鎖保持計數設為一。 如果此鎖已設定為公平排序策略,則若有其他執行緒等待寫入鎖,則可用鎖 <em>將不會<>被取得。 這與方法 #tryLock() 形成對比。 如果你想要一個允許衝撞公平鎖的計時 tryLock 表單,那就把計時和非計時表合併一起:
{@code
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
}}
若目前執行緒已持有此鎖,則保持次數增加一,方法回傳 true。
若鎖由其他執行緒持有,則該當前執行緒將因執行緒排程而被停用,並處於休眠狀態,直到以下三種情況之一發生:
<UL>
<li>寫入鎖由當前執行緒取得;或
<li>其他執行緒 Thread#interrupt 中斷當前執行緒;或
<li>指定的等待時間經過
</ul>
若取得寫入鎖,則回傳該值 true ,寫入鎖保持計數設為一。
如果目前的討論串:
<UL>
<LI>在其進入此方法時設定為中斷狀態;或
<li>是 Thread#interrupt 在取得寫入鎖時被中斷,
</ul>
接著 InterruptedException 拋出,當前執行緒的中斷狀態被清除。
若等待時間達到指定時間,則會回傳該值 false 。 若時間小於或等於零,該方法將完全不等待。
在此實作中,由於此方法為明確的中斷點,優先回應中斷而非正常或重入鎖定,且優先回報等待時間的經過。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。