語言

ICondition.AwaitNanos(Int64) 方法

定義

導致目前執行緒等待,直到收到訊號或中斷,或指定的等待時間結束。

[Android.Runtime.Register("awaitNanos", "(J)J", "GetAwaitNanos_JHandler:Java.Util.Concurrent.Locks.IConditionInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")]
public long AwaitNanos(long nanosTimeout);
[<Android.Runtime.Register("awaitNanos", "(J)J", "GetAwaitNanos_JHandler:Java.Util.Concurrent.Locks.IConditionInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]
abstract member AwaitNanos : int64 -> int64

參數

nanosTimeout
Int64

最大等待時間,以奈秒計

傳回

此方法為該方法的價值估算 nanosTimeout 減去等待返回時間。 正值可作為後續呼叫此方法以完成等待所需時間的參數。 小於或等於零的數值表示時間已無剩餘。

屬性

例外狀況

如果目前執行緒被中斷(且支援執行緒懸掛中斷)

備註

導致目前執行緒等待,直到收到訊號或中斷,或指定的等待時間結束。

與此條件相關的鎖會原子釋放,當前執行緒因執行緒排程而被禁用,並處於休眠狀態,直到 <em 發生五件事<中的 em>一<:>ul<>li>其他執行緒#signal呼叫此方法Condition,且當前執行緒恰好被選為被喚醒的執行緒;或 <li>其他執行緒呼叫#signalAll此Condition方法;或 li><其他執行緒 Thread#interrupt 會中斷目前執行緒,且支援中斷執行緒的暫停;或 <li>指定的等待時間;或 <li>A ”<>EM 虛假喚醒</EM>“ 發生。 </ul>

在所有情況下,在此方法回傳之前,當前執行緒必須重新取得與此條件相關的鎖。 當執行緒回傳時,em <>保證<>會保留這個鎖。

如果目前執行緒:<ul><li>在進入此方法時已設定中斷狀態;或 <li>在等待期間被中斷執行緒#中斷,且支援<執行緒暫停,則InterruptedException拋出 /ul>,當前執行緒的中斷狀態被清除。 在第一種情況下,並未明確說明是否在解鎖前進行中斷測試。

該方法回傳回回時根據所提供 nanosTimeout 值剩餘等待奈秒的估計值,若逾時則回傳小於或等於零的值。此值可用來判斷在等待回來但等待條件仍不成立時,是否應重新等待多久。 此方法的典型用途如下:

{@code
            boolean aMethod(long timeout, TimeUnit unit)
                throws InterruptedException {
              long nanosRemaining = unit.toNanos(timeout);
              lock.lock();
              try {
                while (!conditionBeingWaitedFor()) {
                  if (nanosRemaining <= 0L)
                    return false;
                  nanosRemaining = theCondition.awaitNanos(nanosRemaining);
                }
                // ...
                return true;
              } finally {
                lock.unlock();
              }
            }}

設計說明:此方法需要奈秒級參數,以避免報告剩餘時間時出現截斷錯誤。 這種精度損失會讓程式設計師難以確保在重複等待時,總等待時間不會系統性地縮短於指定時間。

<b>實施考<量/b>

當呼叫此方法時,假設目前執行緒持有與此 Condition 關聯的鎖。 是否如此,是否成立,以及如何回應,則由執行方決定。 通常會拋出一個例外(例如 IllegalMonitorStateException),實作必須記錄該事實。

實作方式可以偏好回應中斷,而非一般方法回傳訊號,或選擇指示指定的等待時間已過。 無論哪種情況,實作都必須確保訊號會被重新導向到另一個等待執行緒(如果有的話)。

Java 文件 java.util.concurrent.locks.Condition.awaitNanos(long)。

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

適用於