Compartir a través de


ICondition.AwaitNanos(Int64) Método

Definición

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.

Se aplica a