語言

ILock.TryLock 方法

定義

多載

名稱 Description
TryLock()

只有在召喚時鎖是空的,才能獲得該鎖。

TryLock(Int64, TimeUnit)

若在指定等待時間內鎖空閒且當前執行緒未被 Thread#interrupt 中斷,則會取得該鎖。

TryLock()

只有在召喚時鎖是空的,才能獲得該鎖。

[Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler:Java.Util.Concurrent.Locks.ILockInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")]
public bool TryLock();
[<Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler:Java.Util.Concurrent.Locks.ILockInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]
abstract member TryLock : unit -> bool

傳回

true 如果鎖是取得的,或其他 false 情況

屬性

備註

只有在召喚時鎖是空的,才能獲得該鎖。

若鎖可用,則取得該鎖,並立即返回 true。 若鎖不可用,此方法將立即返回 ,並取得值 false

此方法的典型使用慣用語為:

{@code
            Lock lock = ...;
            if (lock.tryLock()) {
              try {
                // manipulate protected state
              } finally {
                lock.unlock();
              }
            } else {
              // perform alternative actions
            }}

此用法確保鎖在取得時會解鎖,且不會嘗試解鎖未取得鎖。

Java 文件 java.util.concurrent.locks.Lock.tryLock()

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

適用於

TryLock(Int64, TimeUnit)

若在指定等待時間內鎖空閒且當前執行緒未被 Thread#interrupt 中斷,則會取得該鎖。

[Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler:Java.Util.Concurrent.Locks.ILockInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")]
public bool TryLock(long time, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler:Java.Util.Concurrent.Locks.ILockInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]
abstract member TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool

參數

time
Int64

等待鎖的最長時間

unit
TimeUnit

論證的時間 time 單位

傳回

true 若已取得鎖具,且 false 等待時間已過後才取得

屬性

例外狀況

如果目前執行緒在取得鎖時中斷(且支援中斷鎖定取得)

備註

若在指定等待時間內鎖空閒且當前執行緒未被 Thread#interrupt 中斷,則會取得該鎖。

若鎖可用,此方法立即返回 ,並取得值 true。 若鎖不可用,則當前執行緒將被停用以進行執行緒排程,並處於休眠狀態,直到以下三種情況之一發生:ul<li 鎖定被當前執行緒取得;或 >li<其他執行緒 Thread#interrupt 中斷目前執行緒,且支援中斷鎖定取得;或 >li<指定的等待時間經過 >/ul<><>

若鎖定成功,則該數值 true 會被回傳。

如果目前執行緒:<ul><li>在進入此方法時已設定中斷狀態;或 <li>在取得鎖時被 Thread#interrupt 中斷,且支援鎖取得中斷,則<>會拋出 /ulInterruptedException,當前執行緒的中斷狀態會被清除。

若等待時間達到指定時間,則會回傳該值 false 。 若時間小於或等於零,該方法將完全不等待。

<b>實施考<量/b>

在某些實作中,中斷鎖定取得的能力可能無法實現,即使可能,也可能是一項昂貴的操作。 程式設計師應該知道這可能是事實。 實作應記錄何時發生這種情況。

實作可以偏好回應中斷而非一般方法回傳,或回報逾時。

Lock 作可能偵測錯誤使用鎖,例如會導致死結的調用,並在此類情況下拋出(未檢查的)例外。 該情況與例外類型必須由該 Lock 實作文件記錄。

Java 文件 java.util.concurrent.locks.Lock.tryLock(long, java.util.concurrent.TimeUnit)

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

適用於