次の方法で共有


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 を待機する時間を差し引いた値の推定値。 このメソッドの後続の呼び出しの引数として正の値を使用して、目的の時刻の待機を終了できます。 0 以下の値は、時間が残っていないことを示します。

属性

例外

現在のスレッドが中断された場合 (およびスレッド中断の中断がサポートされている場合)

注釈

現在のスレッドが通知または中断されるまで、または指定された待機時間が経過するまで待機します。

この条件に関連付けられているロックはアトミックに解放され、現在のスレッドはスレッドスケジューリングのために無効になり、5つの><ことが起こるまで<>休止状態になります:<ul<>li>他のスレッドがこれにCondition対してメソッドを呼び出#signalし、現在のスレッドが覚醒するスレッドとして選択されます。または <li>他のスレッドがこのConditionメソッドを呼び出#signalAllす; または li><他のスレッドスレッド#割り込みによって現在のスレッドが中断され、スレッド中断の中断がサポートされています。または <li>指定された待機時間が経過した場合、または <li>A ><em>偽のウェイクアップ</em>> が発生します。 </ul>

いずれの場合も、このメソッドが返される前に、現在のスレッドがこの条件に関連付けられているロックを再取得する必要があります。 スレッドが返されると、 <このロックを保持することが em>保証</em> になります。

現在のスレッド ul <<>li>がこのメソッドへのエントリで割り込み状態を設定している場合、または <li>が Thread#interrupt が待機中に中断され、スレッド中断の中断がサポートされている場合は、/ul>InterruptedException がスローされ、<現在のスレッドの中断状態がクリアされます。 最初のケースでは、ロックが解除される前に中断のテストが行われるかどうかを指定しません。

メソッドは、返された値が返されたときに待機 nanosTimeout する残りのナノ秒数の推定値を返します。タイムアウトした場合は 0 以下の値を返します。この値を使用して、待機が返されたが待機状態がまだ保持されていない場合に、再待機するかどうかを判断できます。 このメソッドの一般的な使用方法は次のとおりです。

{@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)

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

適用対象