ICondition.AwaitNanos(Int64) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 Condition
auf; 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.