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 permesso (nel senso della java.util.concurrent.Semaphore Semaphore
classe). Una chiamata a park
restituirà immediatamente se il permesso è disponibile, lo utilizza nel processo; in caso contrario <, em>può</em> blocco. Una chiamata a unpark
rende disponibile il permesso, se non era già disponibile. A differenza dei semafori, però, 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 rimuovere il parco. Gli ordini delle chiamate a questi metodi vengono mantenuti in relazione agli accessi a variabili volatili, ma non necessariamente agli accessi a variabili non volatili.
I metodi park
e unpark
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 usati per tali scopi: gare tra un thread che richiama park
e un altro thread che tenta unpark
di conservare la durata, a causa del permesso. 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 nuovamente le condizioni al momento della restituzione. In questo senso park
funge da ottimizzazione di una "attesa occupata" che non sprecare tanto tempo rotazione, ma deve essere abbinato a un unpark
per essere efficace.
Le tre forme di park
ognuna supportano anche un blocker
parametro oggetto. Questo oggetto viene registrato mentre il thread è bloccato per consentire il monitoraggio e gli strumenti di diagnostica per identificare i motivi per cui i thread sono bloccati. Tali strumenti possono accedere ai bloccanti usando il metodo #getBlocker(Thread)
. L'uso di queste forme anziché le forme originali senza questo parametro è fortemente incoraggiato. L'argomento normale da fornire come all'interno di un'implementazione di blocker
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 formato:
{@code
while (!canProceed()) {
// ensure request to unpark is visible to other threads
...
LockSupport.park(this);
}}
dove nessuna azione da parte del thread che pubblica una richiesta di unpark, prima della chiamata a park
, comporta il blocco o il blocco. Poiché a ogni thread è associato un solo permesso, qualsiasi uso intermedio di park
, incluso in modo implicito tramite il caricamento delle classi, potrebbe causare un thread non rispondente (un "unpark perso").
<b>Esempio di utilizzo.</b> Ecco uno schizzo di una classe di blocco non reentrant first-in-first-out:
{@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 basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.
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 per l'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 su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto . (Ereditato da Object) |
Notify() |
Riattiva un singolo thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
NotifyAll() |
Riattiva tutti i thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
Park() |
Disabilita il thread corrente a scopo di pianificazione dei thread, a meno che non sia disponibile il permesso. |
Park(Object) |
Disabilita il thread corrente a scopo di pianificazione dei thread, a meno che non sia disponibile il permesso. |
ParkNanos(Int64) |
Disabilita il thread corrente a scopo di pianificazione dei thread, fino al tempo di attesa specificato, a meno che il permesso non sia disponibile. |
ParkNanos(Object, Int64) |
Disabilita il thread corrente a scopo di pianificazione dei thread, fino al tempo di attesa specificato, a meno che il permesso non sia disponibile. |
ParkUntil(Int64) |
Disabilita il thread corrente per scopi di pianificazione dei thread, fino alla scadenza specificata, a meno che non sia disponibile il permesso. |
ParkUntil(Object, Int64) |
Disabilita il thread corrente per scopi di pianificazione dei thread, fino alla scadenza specificata, a meno che non sia disponibile il permesso. |
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 di stringa dell'oggetto. (Ereditato da Object) |
Unpark(Thread) |
Rende disponibile il permesso per il thread specificato, se non era già disponibile. |
UnregisterFromRuntime() |
Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione. (Ereditato da Object) |
Wait() |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>. (Ereditato da Object) |
Wait(Int64, Int32) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
Wait(Int64) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< 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 del tipo di tipo controllato 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. |