ReentrantReadWriteLock.ReentrantWriteLock.TryLock 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í.
Sobrecargas
TryLock() |
Adquiere el bloqueo de escritura solo si no lo mantiene otro subproceso en el momento de la invocación. |
TryLock(Int64, TimeUnit) |
Adquiere el bloqueo de escritura si no lo mantiene otro subproceso dentro del tiempo de espera especificado y el subproceso actual no se ha interrumpido la interrupción de Thread#. |
TryLock()
Adquiere el bloqueo de escritura solo si no lo mantiene otro subproceso en el momento de la invocación.
[Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")]
public virtual bool TryLock();
[<Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")>]
abstract member TryLock : unit -> bool
override this.TryLock : unit -> bool
Devoluciones
true
si el bloqueo estaba libre y lo adquirió el subproceso actual o el bloqueo de escritura ya estaba mantenido por el subproceso actual; y false
de lo contrario.
Implementaciones
- Atributos
Comentarios
Adquiere el bloqueo de escritura solo si no lo mantiene otro subproceso en el momento de la invocación.
Adquiere el bloqueo de escritura si ningún subproceso mantiene el bloqueo de lectura ni escritura y devuelve inmediatamente con el valor true
, estableciendo el recuento de bloqueos de escritura en uno. Incluso cuando este bloqueo se ha establecido para usar una directiva de ordenación justa, una llamada a tryLock()
<em>will</em> adquirirá inmediatamente el bloqueo si está disponible, tanto si otros subprocesos están esperando actualmente el bloqueo de escritura. Este " barging" el comportamiento puede ser útil en determinadas circunstancias, aunque rompa la equidad. Si desea respetar la configuración de equidad de este bloqueo, use #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS)
que es casi equivalente (también detecta interrupciones).
Si el subproceso actual ya contiene este bloqueo, el recuento de suspensiones se incrementa en uno y el método devuelve true
.
Si otro subproceso mantiene el bloqueo, este método devolverá inmediatamente con el valor false
.
Documentación de Java para java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock()
.
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
TryLock(Int64, TimeUnit)
Adquiere el bloqueo de escritura si no lo mantiene otro subproceso dentro del tiempo de espera especificado y el subproceso actual no se ha interrumpido la interrupción de Thread#.
[Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryLock(long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
Parámetros
- timeout
- Int64
el tiempo de espera para el bloqueo de escritura
- unit
- TimeUnit
la unidad de tiempo del argumento de tiempo de espera
Devoluciones
true
si el bloqueo estaba libre y lo adquirió el subproceso actual o el bloqueo de escritura ya estaba mantenido por el subproceso actual; y false
si el tiempo de espera transcurrido antes de que se pueda adquirir el bloqueo.
Implementaciones
- Atributos
Excepciones
si se interrumpe el subproceso actual
si la unidad de tiempo es null
Comentarios
Adquiere el bloqueo de escritura si no lo mantiene otro subproceso dentro del tiempo de espera especificado y el subproceso actual no se ha interrumpido la interrupción de Thread#.
Adquiere el bloqueo de escritura si ningún subproceso mantiene el bloqueo de lectura ni escritura y devuelve inmediatamente con el valor true
, estableciendo el recuento de bloqueos de escritura en uno. Si este bloqueo se ha establecido para usar una directiva de ordenación justa, se adquirirá un bloqueo <disponible que>no>< se adquirirá si algún otro subproceso está esperando el bloqueo de escritura. Esto contrasta con el #tryLock()
método . Si desea un tiempo tryLock
que permita la barra en un bloqueo justo, combine los formularios con tiempo y sin tiempo juntos:
{@code
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
}}
Si el subproceso actual ya contiene este bloqueo, el recuento de suspensiones se incrementa en uno y el método devuelve true
.
Si otro subproceso mantiene el bloqueo, el subproceso actual se deshabilita con fines de programación de subprocesos y permanece inactivo hasta que se produzca una de las tres cosas:
<ul>
<li>El bloqueo de escritura lo adquiere el subproceso actual; o
<li>Otros subprocesos Thread#interrupt interrumpen el subproceso actual; o
<li>El tiempo de espera especificado transcurre
</ul>
Si se adquiere el bloqueo de escritura, se devuelve el valor true
y el número de bloqueos de escritura se establece en uno.
Si el subproceso actual:
<ul>
<li>tiene su estado interrumpido establecido en la entrada a este método; o
<li>es Thread#interrupt interrumpida al adquirir el bloqueo de escritura,
</ul>
a continuación InterruptedException
, se produce y se borra el estado interrumpido del subproceso actual.
Si transcurre el tiempo de espera especificado, se devuelve el valor false
. Si el tiempo es menor o igual que cero, el método no esperará en absoluto.
En esta implementación, como este método es un punto de interrupción explícito, se da preferencia a responder a la interrupción sobre la adquisición normal o reentrante del bloqueo, y sobre la generación de informes del tiempo de espera.
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.