LockSupport Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.
[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
- Ereditarietà
- Attributi
Commenti
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.
Questa classe associa, a ogni thread che lo usa, un consentito (nel senso della java.util.concurrent.Semaphore Semaphore
classe). Una chiamata a park
restituirà immediatamente se il permesso è disponibile, consumandolo nel processo; in caso contrario, <il blocco può</em>>. Una chiamata a rendere unpark
disponibile l'autorizzazione, se non era già disponibile. A differenza dei semafori, tuttavia, i permessi non si accumulano. C'è al massimo uno. L'utilizzo affidabile richiede l'uso di variabili volatili (o atomiche) per controllare quando parcheggiare o unpark. Gli ordini di chiamate a questi metodi vengono mantenuti rispetto agli accessi a variabili volatili, ma non necessariamente non volatili.
I metodi park
e forniscono mezzi efficienti per bloccare e sbloccare i thread che non riscontrano i problemi che causano i metodi Thread.suspend
deprecati e Thread.resume
non possono essere utilizzabili a tale scopo: le gare tra un thread park
che richiamano e un altro thread che unpark
tentano di conservare la livezza, a causa dell'autorizzazioneunpark
. Inoltre, park
restituirà se il thread del chiamante è stato interrotto e le versioni di timeout sono supportate. Il park
metodo può anche restituire in qualsiasi altro momento, per "nessun motivo", quindi in generale deve essere richiamato all'interno di un ciclo che controlla le condizioni al momento della restituzione. In questo senso park
funge da ottimizzazione di una "attesa occupato" che non perde il tempo di rotazione, ma deve essere associato a un unpark
oggetto per essere efficace.
Le tre forme di park
ognuna supportano anche un blocker
parametro oggetto. Questo oggetto viene registrato mentre il thread viene bloccato per consentire il monitoraggio e gli strumenti di diagnostica per identificare i motivi per cui i thread vengono bloccati. Tali strumenti possono accedere ai blocchi usando il metodo #getBlocker(Thread)
.) L'uso di questi moduli anziché i moduli originali senza questo parametro è fortemente incoraggiato. L'argomento normale da specificare come blocker
oggetto all'interno di un'implementazione di blocco è this
.
Questi metodi sono progettati per essere usati come strumenti per la creazione di utilità di sincronizzazione di livello superiore e non sono in sé utili per la maggior parte delle applicazioni di controllo della concorrenza. Il park
metodo è progettato per l'uso solo nelle costruzioni del modulo:
{@code
while (!canProceed()) {
// ensure request to unpark is visible to other threads
...
LockSupport.park(this);
}}
dove non vengono eseguite azioni dal thread che pubblica una richiesta a unpark, prima della chiamata a park
, comporta il blocco o il blocco. Poiché un solo consentito è associato a ogni thread, qualsiasi uso intermedio di park
, incluso in modo implicito tramite il caricamento della classe, potrebbe causare un thread non rispondente (un "unpark perso").
<b>Utilizzo di esempio.</b Ecco uno schizzo di una classe di blocco non reentrant first-in-first:b> Here is a sketch of a first-in-first-out lock class:
{@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;
}
}}
Aggiunto nella versione 1.5.
Documentazione Java per java.util.concurrent.locks.LockSupport
.
Le parti di questa pagina sono modifiche in base al lavoro creato e condiviso dal Android Open Source e usato in base ai termini descritti nella .
Costruttori
LockSupport(IntPtr, JniHandleOwnership) |
Costruttore usato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime. |
Proprietà
Class |
Restituisce la classe di runtime di questo |
Handle |
Handle all'istanza di Android sottostante. (Ereditato da Object) |
JniIdentityHashCode |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
JniPeerMembers |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. |
PeerReference |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
ThresholdClass |
Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice. |
ThresholdType |
Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice. |
Metodi
Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
Dispose() |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
Dispose(Boolean) |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
GetBlocker(Thread) |
Restituisce l'oggetto blocker fornito alla chiamata più recente di un metodo park che non è ancora stato sbloccato o null se non è bloccato. |
GetHashCode() |
Restituisce un valore del codice hash per l'oggetto. (Ereditato da Object) |
JavaFinalize() |
Chiamato dal Garbage Collector in un oggetto quando Garbage Collection determina che non sono presenti più riferimenti all'oggetto. (Ereditato da Object) |
Notify() |
Riattiva un singolo thread in attesa del monitoraggio dell'oggetto. (Ereditato da Object) |
NotifyAll() |
Riattiva tutti i thread in attesa del monitoraggio dell'oggetto. (Ereditato da Object) |
Park() |
Disabilita il thread corrente per scopi di pianificazione del thread, a meno che non sia disponibile l'autorizzazione. |
Park(Object) |
Disabilita il thread corrente per scopi di pianificazione del thread, a meno che non sia disponibile l'autorizzazione. |
ParkNanos(Int64) |
Disabilita il thread corrente per scopi di pianificazione del thread, fino al tempo di attesa specificato, a meno che non sia disponibile l'autorizzazione. |
ParkNanos(Object, Int64) |
Disabilita il thread corrente per scopi di pianificazione del thread, fino al tempo di attesa specificato, a meno che non sia disponibile l'autorizzazione. |
ParkUntil(Int64) |
Disabilita il thread corrente per scopi di pianificazione del thread, fino alla scadenza specificata, a meno che non sia disponibile l'autorizzazione. |
ParkUntil(Object, Int64) |
Disabilita il thread corrente per scopi di pianificazione del thread, fino alla scadenza specificata, a meno che non sia disponibile l'autorizzazione. |
SetCurrentBlocker(Object) |
Imposta l'oggetto da restituire tramite chiamate di |
SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
ToArray<T>() |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
ToString() |
Restituisce una rappresentazione in formato stringa dell'oggetto. (Ereditato da Object) |
Unpark(Thread) |
Rende disponibile l'autorizzazione per il thread specificato, se non è già disponibile. |
UnregisterFromRuntime() |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
Wait() |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere eseguendo>una notifica</em o <em interrotto</>em>>.< (Ereditato da Object) |
Wait(Int64) |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale. (Ereditato da Object) |
Wait(Int64, Int32) |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
IJavaPeerable.Disposed() |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
IJavaPeerable.Finalized() |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
IJavaPeerable.JniManagedPeerState |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione dei tipi controllati dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. |
GetJniTypeName(IJavaPeerable) |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. |