共用方式為


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

等候的時間上限,以 nanoseconds 為單位

傳回

值的估計 nanosTimeout 值減去等候此方法傳回所花費的時間。 正值可用來做為此方法後續呼叫的自變數,以完成等候所需的時間。 小於或等於零的值表示沒有任何時間保留。

屬性

例外狀況

如果目前的線程中斷(且支援線程暫停中斷)

備註

導致目前線程等候,直到發出訊號或中斷,或指定的等候時間經過為止。

與這個條件相關聯的鎖定會以不可部分完成的方式釋放,而目前線程會因為線程排程目的而停用,並處於休眠狀態,直到<發生五件事的 em>一</em> 為止:<ul<>li>其他線程#signal會叫用此方法Condition,而目前線程則恰好選擇為要喚醒的線程;或 <li 其他線程#signalAll會叫用此方法Condition; 或 li>><有些其他線程 Thread#interrupt 會中斷目前的線程,而且支援線程暫停中斷;或 <li> 指定的等候時間經過; 或 <li>A “<em>假覺醒</em>“ 發生。 </ul>

在所有情況下,在此方法可以傳回目前線程之前,必須先重新取得與此條件相關聯的鎖定。 當線程傳回時,其為 <em>保證</em> 來保存此鎖定。

如果目前的線程:<ul><li>在其進入此方法時設定其中斷狀態;或 <li>是 Thread#interrupt 在等候且線程暫停中斷時受到支援,則會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();
              }
            }}

設計注意事項:此方法需要 nanosecond 自變數,以避免在報告剩餘時間時發生截斷錯誤。 這種精確度損失會使程式設計人員難以確保總等候時間不會系統地比重新等候發生時指定的短。

<b>實作考慮</b>

呼叫此方法時,假設目前的線程會保留與此 Condition 相關聯的鎖定。 實作可判斷此情況是否為案例,如果不是,則為如何回應。 一般而言,會擲回例外狀況(例如 IllegalMonitorStateException),而實作必須記錄該事實。

實作可能有利於響應中斷,而透過一般方法傳回來響應訊號,或過度指出指定等候時間的經過。 在任一情況下,如果有一個,實作都必須確保訊號重新導向至另一個等候線程。

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

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

適用於