ICondition.AwaitNanos(Int64) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Hace que el subproceso actual espere hasta que se señale o se interrumpa, o el tiempo de espera especificado transcurre.
[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
Parámetros
- nanosTimeout
- Int64
tiempo máximo de espera, en nanosegundos
Devoluciones
una estimación del nanosTimeout
valor menos el tiempo invertido en esperar a la devolución de este método.
Se puede usar un valor positivo como argumento para una llamada posterior a este método para terminar de esperar el tiempo deseado. Un valor menor o igual que cero indica que no queda tiempo.
- Atributos
Excepciones
si se interrumpe el subproceso actual (y se admite la interrupción de la suspensión del subproceso)
Comentarios
Hace que el subproceso actual espere hasta que se señale o se interrumpa, o el tiempo de espera especificado transcurre.
El bloqueo asociado a esta condición se libera de forma atómica y el subproceso actual se deshabilita con fines de programación de subprocesos y permanece inactivo hasta <que se produzcan cinco>>< cosas: <ul><li>Otros subprocesos invocan el #signal
método para esto Condition
y el subproceso actual se elige como subproceso que se va a despertar; o <li>Otros subprocesos invocan el #signalAll
método para este Condition
; o li><Otros subprocesos Thread#interrupt interrumpen el subproceso actual y se admite la interrupción de la suspensión del subproceso; o <li>El tiempo de espera especificado transcurre; o <li>A "<em>espurios wakeup</em>" se produce. </ul>
En todos los casos, antes de que este método pueda devolver el subproceso actual debe volver a adquirir el bloqueo asociado a esta condición. Cuando el subproceso devuelve, se <>garantiza</em> para mantener este bloqueo.
Si el subproceso actual: ul>li tiene su estado interrumpido establecido en la entrada a este método; o <li>es Thread#interrupt interrumpida mientras se admite la espera e interrupción de la suspensión del subproceso, <se produce /ul InterruptedException
> y se borra el estado interrumpido del subproceso actual.><< No se especifica, en el primer caso, si se produce o no la prueba de interrupción antes de que se libere el bloqueo.
El método devuelve una estimación del número de nanosegundos restantes para esperar según el valor proporcionado nanosTimeout
tras la devolución, o un valor menor o igual que cero si se agota el tiempo de espera. Este valor se puede usar para determinar si y cuánto tiempo se va a volver a esperar en los casos en los que la espera devuelve, pero una condición esperada todavía no se mantiene. Los usos típicos de este método tienen la siguiente forma:
{@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();
}
}}
Nota de diseño: Este método requiere un argumento nanosegundo para evitar errores de truncamiento en la generación de informes de tiempos restantes. Esta pérdida de precisión dificultaría a los programadores asegurarse de que los tiempos de espera totales no sean sistemáticamente más cortos que los especificados cuando se produzcan reesperiones.
<b>Consideraciones de< implementación/b>
Se supone que el subproceso actual contiene el bloqueo asociado a este Condition
cuando se llama a este método. Es necesario que la implementación determine si este es el caso y, si no es así, cómo responder. Normalmente, se producirá una excepción (como IllegalMonitorStateException
) y la implementación debe documentar ese hecho.
Una implementación puede favorecer la respuesta a una interrupción sobre el retorno del método normal en respuesta a una señal, o bien una superación que indica el tiempo de espera especificado. En cualquier caso, la implementación debe asegurarse de que la señal se redirige a otro subproceso en espera, si hay uno.
Documentación de Java para java.util.concurrent.locks.Condition.awaitNanos(long)
.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.