Linguaggio

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.

per java.util.concurrent.locks.LockSupport.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.

Costruttori

Nome Descrizione
LockSupport(IntPtr, JniHandleOwnership)

Costruttore usato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime.

Proprietà

Nome Descrizione
Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità.

(Ereditato da Object)
JniManagedPeerState

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
JniPeerMembers

Ottiene i metadati JNI usati per richiamare i membri di questo peer Java.

PeerReference

Ottiene il riferimento all'oggetto JNI per questo peer Java.

(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

Nome Descrizione
Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
Dispose()

Rilascia le risorse contenute in questo peer Java.

(Ereditato da Object)
Dispose(Boolean)

Rilascia le risorse contenute in questo peer Java.

(Ereditato da Object)
DisposeUnlessReferenced()

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
Equals(Object)

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
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 di 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)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
ToArray<T>()

Crea una matrice gestita da questo wrapper di matrice Java.

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

Annulla la registrazione di questo Java peer dal runtime di interoperabilità.

(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

Nome Descrizione
IJavaPeerable.Disposed()

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
IJavaPeerable.Finalized()

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Primitive di blocco dei thread di base per la creazione di blocchi e altre classi di sincronizzazione.

(Ereditato da JavaObject)

Metodi di estensione

Nome Descrizione
GetJniTypeName(IJavaPeerable)

Ottiene il nome JNI del tipo dell'istanza selfdi .

JavaAs<TResult>(IJavaPeerable)

Provare a digitare selfTResult, verificando che la coercizione sia valida sul lato Java.

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.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Provare a digitare selfTResult, verificando che la coercizione sia valida sul lato Java.

Si applica a