Freigeben über


ICondition.AwaitNanos(Int64) Methode

Definition

Bewirkt, dass der aktuelle Thread wartet, bis er signalisiert oder unterbrochen wird oder die angegebene Wartezeit verstrichen ist.

[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

Parameter

nanosTimeout
Int64

die maximale Wartezeit in Nanosekunden

Gibt zurück

eine Schätzung des nanosTimeout Werts minus der Zeit, die beim Warten auf die Rückgabe dieser Methode aufgewendet wurde. Ein positiver Wert kann als Argument für einen nachfolgenden Aufruf dieser Methode verwendet werden, um das Warten auf die gewünschte Zeit abzuschließen. Ein Wert kleiner oder gleich Null gibt an, dass keine Zeit verbleibt.

Attribute

Ausnahmen

wenn der aktuelle Thread unterbrochen wird (und Unterbrechung der Threadaufsetzung unterstützt wird)

Hinweise

Bewirkt, dass der aktuelle Thread wartet, bis er signalisiert oder unterbrochen wird oder die angegebene Wartezeit verstrichen ist.

Die dieser Bedingung zugeordnete Sperre wird atomisch freigegeben, und der aktuelle Thread wird für Threadplanungszwecke deaktiviert und liegt ruhend, bis em one/em> von fünf Dingen passiert: <ul<>li>Ein anderer Thread ruft die #signal Methode dafür Condition auf, und der aktuelle Thread wird als Thread ausgewählt, der wach werden soll; oder <li ruft die #signalAll Methode dafür Conditionauf; oder <li>li><><Einige andere Thread-Thread#-Interrupt unterbricht den aktuellen Thread, und Unterbrechung der Threadaufsetzung wird unterstützt; oder <li>Die angegebene Wartezeit verstrichen; oder <li>A "<em>spurious wakeup</em>" tritt auf. </ul>

In allen Fällen muss, bevor diese Methode den aktuellen Thread zurückgeben kann, die mit dieser Bedingung verknüpfte Sperre erneut abrufen. Wenn der Thread zurückgibt, ist <>es garantiert</em>, diese Sperre zu halten.

Wenn der aktuelle Thread: <ul><li>seinen unterbrochenen Status für den Eintrag in dieser Methode festgelegt hat; oder <li>ist Thread#interrupt unterbrochen, während warten und Unterbrechung der Threadaufsetzung unterstützt wird, <wird /ul> dann InterruptedException ausgelöst, und der unterbrochene Status des aktuellen Threads wird gelöscht. Es wird nicht angegeben, im ersten Fall, ob der Test auf Unterbrechung auftritt, bevor die Sperre losgelassen wird.

Die Methode gibt eine Schätzung der Anzahl der verbleibenden Nanosekunden zurück, um zu warten, wenn der angegebene nanosTimeout Wert zurückgegeben wird, oder einen Wert kleiner oder gleich Null, wenn ein Timeout erfolgt. Dieser Wert kann verwendet werden, um zu bestimmen, ob und wie lange die Wartezeit in Fällen erneut gewartet werden soll, in denen die Wartezeit zurückgegeben wird, aber eine erwartete Bedingung weiterhin nicht aufbewahrt wird. Typische Verwendungen dieser Methode haben folgende Form:

{@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();
              }
            }}

Entwurfshinweis: Für diese Methode ist ein Nanosekundenargument erforderlich, um abgeschnittene Fehler bei der Berichterstellung zu vermeiden. Ein solcher Genauigkeitsverlust würde es Programmierern erschweren, sicherzustellen, dass die Gesamtwartezeiten nicht systematisch kürzer sind als angegeben, wenn wiederholungsverwartet wird.

<b>Überlegungen zur Implementierung</b>

Der aktuelle Thread wird davon ausgegangen, dass die dieser Condition Sperre zugeordnet ist, wenn diese Methode aufgerufen wird. Es liegt an der Implementierung, festzustellen, ob dies der Fall ist und wenn nicht, wie man reagiert. In der Regel wird eine Ausnahme ausgelöst (z IllegalMonitorStateException. B. ) und die Implementierung muss diese Tatsache dokumentieren.

Eine Implementierung kann das Reagieren auf einen Interrupt über die normale Methodenrückgabe als Reaktion auf ein Signal oder die Angabe des Verstrichens der angegebenen Wartezeit bevorzugen. In beiden Fällen muss die Implementierung sicherstellen, dass das Signal an einen anderen Wartethread umgeleitet wird, falls vorhanden.

Java-Dokumentation für java.util.concurrent.locks.Condition.awaitNanos(long).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: