語言

ReentrantReadWriteLock.ReentrantWriteLock.TryLock 方法

定義

多載

名稱 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 。 若時間小於或等於零,該方法將完全不等待。

在此實作中,由於此方法為明確的中斷點,優先回應中斷而非正常或重入鎖定,且優先回報等待時間的經過。

Java 文件 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock(long, java.util.concurrent.TimeUnit)。

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

適用於