語言

ReentrantLock.TryLock 方法

定義

多載

名稱 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 所創建與分享的作品,並依授權條款所描述的使用進行修改。

適用於