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

(Ereditato da Object)
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 #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 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.

Si applica a