ReentrantLock.TryLock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| TryLock(Int64, TimeUnit) |
若在指定等待時間內未被其他執行緒持有,且當前執行緒未被 Thread#interrupt 中斷,則會取得該鎖。 |
| TryLock() |
只有在呼叫時鎖未被其他執行緒持有時,才會取得該鎖。 |
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
超時論證的時間單位
傳回
true 如果鎖是空閒且已被當前執行緒取得,或鎖已被當前執行緒持有;以及 false 若等待時間過後才能取得鎖具
實作
- 屬性
例外狀況
如果目前執行緒被中斷
若時間單位為零
備註
若在指定等待時間內未被其他執行緒持有,且當前執行緒未被 Thread#interrupt 中斷,則會取得該鎖。
若鎖未被其他執行緒持有,則取得該鎖,並立即返回 ,將 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 中斷,
<接著>拋出 /ulInterruptedException,當前執行緒的中斷狀態會被清除。
若等待時間達到指定時間,則會回傳該值 false 。 若時間小於或等於零,該方法將完全不等待。
在此實作中,由於此方法為明確的中斷點,優先回應中斷而非正常或重入鎖定,且優先回報等待時間的經過。
Java 文件 java.util.concurrent.locks.ReentrantLock.tryLock(long, java.util.concurrent.TimeUnit)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
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.ReentrantLock.tryLock()。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。