LockSupport Classe
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.
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização.
[Android.Runtime.Register("java/util/concurrent/locks/LockSupport", DoNotGenerateAcw=true)]
public class LockSupport : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/locks/LockSupport", DoNotGenerateAcw=true)>]
type LockSupport = class
inherit Object
- Herança
- Atributos
Comentários
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização.
Essa classe associa, a cada thread que o usa, uma permissão (no sentido da java.util.concurrent.Semaphore Semaphore classe). Uma chamada será park retornada imediatamente se a licença estiver disponível, consumindo-a no processo; caso contrário,<ela >poderá</em> bloquear. Uma chamada para unpark disponibilizar a licença, caso ainda não estivesse disponível. (Ao contrário de Semáforos, porém, as licenças não se acumulam. Há no máximo um.) O uso confiável requer o uso de variáveis voláteis (ou atômicas) para controlar quando estacionar ou desapará-lo. As ordenações de chamadas a esses métodos são mantidas em relação a acessos variáveis voláteis, mas não necessariamente acessos variáveis não voláteis.
Métodos park e unpark fornecer meios eficientes de bloquear e desbloquear threads que não encontrarem os problemas que causam os métodos preteridos Thread.suspend e Thread.resume serem inutilizáveis para tais finalidades: as corridas entre um thread invocando park e outro thread tentando unpark isso preservarão a vida, devido à permissão. Além disso, park retornará se o thread do chamador tiver sido interrompido e houver suporte para versões de tempo limite. O park método também pode retornar em qualquer outro momento, por "nenhum motivo", portanto, em geral, deve ser invocado dentro de um loop que verifica novamente as condições no retorno. Nesse sentido park , serve como uma otimização de uma "espera ocupada" que não perde tanto tempo girando, mas deve ser emparelhada com uma unpark para ser eficaz.
As três formas de park cada uma também dão suporte a um blocker parâmetro de objeto. Esse objeto é registrado enquanto o thread é bloqueado para permitir que ferramentas de monitoramento e diagnóstico identifiquem os motivos pelos quais os threads são bloqueados. (Essas ferramentas podem acessar bloqueadores usando o método #getBlocker(Thread).) O uso desses formulários em vez dos formulários originais sem esse parâmetro é altamente incentivado. O argumento normal a ser fornecido como uma blocker implementação de bloqueio é this.
Esses métodos foram projetados para serem usados como ferramentas para criar utilitários de sincronização de nível superior e não são úteis para a maioria dos aplicativos de controle de simultaneidade. O park método foi projetado para uso somente em construções do formulário:
{@code
while (!canProceed()) {
// ensure request to unpark is visible to other threads
...
LockSupport.park(this);
}}
em que nenhuma ação do thread que publica uma solicitação para desparparo, antes da chamada para park, implica bloqueio ou bloqueio. Como apenas uma permissão está associada a cada thread, qualquer uso intermediário de , incluindo implicitamente por meio do parkcarregamento de classe, pode levar a um thread sem resposta (um "unpark perdido").
<b>Uso de exemplo.</b> Aqui está um esboço de uma classe de bloqueio não reentrant primeiro a sair:
{@code
class FIFOMutex {
private final AtomicBoolean locked = new AtomicBoolean(false);
private final Queue<Thread> waiters
= new ConcurrentLinkedQueue<>();
public void lock() {
boolean wasInterrupted = false;
// publish current thread for unparkers
waiters.add(Thread.currentThread());
// Block while not first in queue or cannot acquire lock
while (waiters.peek() != Thread.currentThread() ||
!locked.compareAndSet(false, true)) {
LockSupport.park(this);
// ignore interrupts while waiting
if (Thread.interrupted())
wasInterrupted = true;
}
waiters.remove();
// ensure correct interrupt status on return
if (wasInterrupted)
Thread.currentThread().interrupt();
}
public void unlock() {
locked.set(false);
LockSupport.unpark(waiters.peek());
}
static {
// Reduce the risk of "lost unpark" due to classloading
Class<?> ensureLoaded = LockSupport.class;
}
}}
Adicionado em 1.5.
Java documentação para java.util.concurrent.locks.LockSupport.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.
Construtores
| Nome | Description |
|---|---|
| LockSupport(IntPtr, JniHandleOwnership) |
Um construtor usado ao criar representações gerenciadas de objetos JNI; chamado pelo runtime. |
Propriedades
| Nome | Description |
|---|---|
| Class |
Retorna a classe de runtime deste |
| Handle |
O identificador para a instância subjacente do Android. (Herdado de Object) |
| JniIdentityHashCode |
Obtém o código de hash de identidade atribuído a esse par Java pelo runtime de interoperabilidade. (Herdado de Object) |
| JniManagedPeerState |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| JniPeerMembers |
Obtém os metadados JNI usados para invocar membros desse par Java. |
| PeerReference |
Obtém a referência de objeto JNI para este par Java. (Herdado de Object) |
| ThresholdClass |
Essa API é compatível com a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código. |
| ThresholdType |
Essa API é compatível com a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código. |
Métodos
| Nome | Description |
|---|---|
| Clone() |
Cria e retorna uma cópia desse objeto. (Herdado de Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| Dispose() |
Libera os recursos mantidos por esse par Java. (Herdado de Object) |
| Dispose(Boolean) |
Libera os recursos mantidos por esse par Java. (Herdado de Object) |
| DisposeUnlessReferenced() |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| Equals(Object) |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| Equals(Object) |
Indica se algum outro objeto é "igual a" este. (Herdado de Object) |
| GetBlocker(Thread) |
Retorna o objeto bloqueador fornecido para a invocação mais recente de um método de parque que ainda não foi desbloqueado ou nulo se não estiver bloqueado. |
| GetHashCode() |
Retorna um valor de código hash para o objeto. (Herdado de Object) |
| JavaFinalize() |
Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto. (Herdado de Object) |
| Notify() |
Ativa um único thread que está aguardando no monitor deste objeto. (Herdado de Object) |
| NotifyAll() |
Ativa todos os threads que estão aguardando no monitor deste objeto. (Herdado de Object) |
| Park() |
Desabilita o thread atual para fins de agendamento de thread, a menos que a permissão esteja disponível. |
| Park(Object) |
Desabilita o thread atual para fins de agendamento de thread, a menos que a permissão esteja disponível. |
| ParkNanos(Int64) |
Desabilita o thread atual para fins de agendamento de thread, até o tempo de espera especificado, a menos que a permissão esteja disponível. |
| ParkNanos(Object, Int64) |
Desabilita o thread atual para fins de agendamento de thread, até o tempo de espera especificado, a menos que a permissão esteja disponível. |
| ParkUntil(Int64) |
Desabilita o thread atual para fins de agendamento de thread, até o prazo especificado, a menos que a permissão esteja disponível. |
| ParkUntil(Object, Int64) |
Desabilita o thread atual para fins de agendamento de thread, até o prazo especificado, a menos que a permissão esteja disponível. |
| SetCurrentBlocker(Object) |
Define o objeto a ser retornado por invocações do |
| SetHandle(IntPtr, JniHandleOwnership) |
Define a propriedade Handle (Herdado de Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| ToArray<T>() |
Cria uma matriz gerenciada com base nesse wrapper de matriz Java. (Herdado de Object) |
| ToString() |
Retorna uma representação de cadeia de caracteres do objeto. (Herdado de Object) |
| Unpark(Thread) |
Disponibiliza a permissão para o thread especificado, se ele ainda não estava disponível. |
| UnregisterFromRuntime() |
Cancela o registro desse par Java do runtime de interoperabilidade. (Herdado de Object) |
| Wait() |
Faz com que o thread atual aguarde até ser despertado, normalmente por ser <notificado/em> ou <em>interrompido</em>.<> (Herdado de Object) |
| Wait(Int64, Int32) |
Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido. (Herdado de Object) |
| Wait(Int64) |
Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido. (Herdado de Object) |
Implantações explícitas de interface
| Nome | Description |
|---|---|
| IJavaPeerable.Disposed() |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| IJavaPeerable.Finalized() |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. (Herdado de JavaObject) |
Métodos de Extensão
| Nome | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtém o nome JNI do tipo da instância |
| JavaAs<TResult>(IJavaPeerable) |
Tente coagir a digitar |
| JavaCast<TResult>(IJavaObject) |
Executa uma conversão de tipo marcada por runtime do Android. |
| JavaCast<TResult>(IJavaObject) |
Primitivos básicos de bloqueio de thread para criar bloqueios e outras classes de sincronização. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Tente coagir a digitar |