Condividi tramite


LockSupport Classe

Definizione

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à
LockSupport
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 Objectoggetto .

(Ereditato da Object)
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 #getBlocker getBlocker per il thread corrente.

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)

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, 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)

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.

Si applica a