ReentrantReadWriteLock.ReentrantWriteLock.TryLock Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Sobrecargas
TryLock() |
Adquire o bloqueio de gravação somente se ele não for mantido por outro thread no momento da invocação. |
TryLock(Int64, TimeUnit) |
Adquire o bloqueio de gravação se ele não for mantido por outro thread dentro do tempo de espera determinado e o thread atual não tiver sido interrompido por Thread#interrupt. |
TryLock()
Adquire o bloqueio de gravação somente se ele não for mantido por outro thread no momento da invocação.
[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
Retornos
true
se o bloqueio estava livre e foi adquirido pelo thread atual, ou o bloqueio de gravação já estava mantido pelo thread atual; e false
outros.
Implementações
- Atributos
Comentários
Adquire o bloqueio de gravação somente se ele não for mantido por outro thread no momento da invocação.
Adquire o bloqueio de gravação se nem o bloqueio de leitura nem o bloqueio de gravação forem mantidos por outro thread e retorna imediatamente com o valor true
, definindo a contagem de bloqueio de gravação como um. Mesmo quando esse bloqueio tiver sido definido para usar uma política de ordenação justa, uma chamada para tryLock()
<em>adquirirá<> imediatamente o bloqueio se ele estiver disponível, independentemente de outros threads estarem ou não aguardando o bloqueio de gravação. Isso " barbear" O comportamento pode ser útil em certas circunstâncias, mesmo que quebre a equidade. Se você quiser honrar a configuração de justiça para este bloqueio, então use #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS)
o que é quase equivalente (ele também detecta interrupção).
Se o thread atual já mantiver esse bloqueio, a contagem de retenção será incrementada em um e o método retornará true
.
Se o bloqueio for mantido por outro thread, esse método retornará imediatamente com o valor false
.
Documentação Java para java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock()
.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.
Aplica-se a
TryLock(Int64, TimeUnit)
Adquire o bloqueio de gravação se ele não for mantido por outro thread dentro do tempo de espera determinado e o thread atual não tiver sido interrompido por Thread#interrupt.
[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
O tempo para aguardar o bloqueio de gravação
- unit
- TimeUnit
A unidade de tempo do argumento Timeout
Retornos
true
se o bloqueio estava livre e foi adquirido pelo thread atual, ou o bloqueio de gravação já estava mantido pelo thread atual; e false
se o tempo de espera decorreu para que o bloqueio pudesse ser adquirido.
Implementações
- Atributos
Exceções
se o thread atual for interrompido
se a unidade de tempo for null
Comentários
Adquire o bloqueio de gravação se ele não for mantido por outro thread dentro do tempo de espera determinado e o thread atual não tiver sido interrompido por Thread#interrupt.
Adquire o bloqueio de gravação se nem o bloqueio de leitura nem o bloqueio de gravação forem mantidos por outro thread e retorna imediatamente com o valor true
, definindo a contagem de bloqueio de gravação como um. Se esse bloqueio tiver sido definido para usar uma política de ordenação justa, um bloqueio <disponível não>será<> adquirido se quaisquer outros threads estiverem aguardando o bloqueio de gravação. Isso contrasta com o #tryLock()
método. Se você quiser um cronometrado tryLock
que permita o bloqueio justo, combine os formulários cronometrados e não cronometrados juntos:
{@code
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
}}
Se o thread atual já mantiver esse bloqueio, a contagem de retenção será incrementada em um e o método retornará true
.
Se o bloqueio for mantido por outro thread, o thread atual será desabilitado para fins de agendamento de thread e ficará inativo até que uma das três coisas aconteça:
<ul>
<li>O bloqueio de gravação é adquirido pelo thread atual;
<li>Algum outro thread Thread#interrupt interrompe o thread atual; ou
<li>O tempo de espera especificado decorre
</ul>
Se o bloqueio de gravação for adquirido, o valor true
será retornado e a contagem de retenção de bloqueio de gravação será definida como um.
Se o thread atual:
<ul>
<li>tem seu status interrompido definido na entrada para este método;
<li>é Thread#interrupt interrompido ao adquirir o bloqueio de gravação,
</ul>
em seguida, InterruptedException
é lançado e o status interrompido do thread atual é limpo.
Se o tempo de espera especificado passar, o valor false
será retornado. Se o tempo for menor ou igual a zero, o método não esperará.
Nesta implementação, como este método é um ponto de interrupção explícito, é dada preferência à resposta à interrupção em relação à aquisição normal ou reentrante do bloqueio, e ao excesso de relato do tempo de espera.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.