Freigeben über


LockSupport Klasse

Definition

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

[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
Vererbung
LockSupport
Attribute

Hinweise

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

Diese Klasse ordnet jedem Thread, der ihn verwendet, eine Genehmigung (im Sinne der java.util.concurrent.Semaphore Semaphore Klasse) zu. Ein Aufruf wird park sofort zurückgegeben, wenn die Genehmigung verfügbar ist und sie im Prozess verbraucht. Andernfalls wird em <may></em> block. Ein Aufruf, um die Genehmigung zur Verfügung zu unpark stellen, sofern sie noch nicht verfügbar war. (Im Gegensatz zu Semaphoren sammeln sich die Genehmigungen jedoch nicht an. Es gibt höchstens eins.) Eine zuverlässige Verwendung erfordert die Verwendung von veränderbaren (oder atomigen) Variablen, um zu steuern, wann sie parken oder entparken. Die Reihenfolge der Aufrufe dieser Methoden wird in Bezug auf veränderliche Variablenzugriffe beibehalten, jedoch nicht unbedingt nicht-veränderliche Variablenzugriffe.

Methoden park und unpark effiziente Mittel zum Blockieren und Aufheben der Blockierung von Threads, die nicht auf die Probleme stoßen, die die veralteten Methoden Thread.suspend verursachen und Thread.resume für solche Zwecke unbrauchbar sind: Rennen zwischen einem Thread, der aufgerufen park wird, und einem anderen Thread, der versucht, die unpark Lebendigkeit zu bewahren, aufgrund der Genehmigung. Darüber hinaus wird zurückgegeben, park wenn der Thread des Aufrufers unterbrochen wurde, und Timeoutversionen werden unterstützt. Die park Methode kann auch zu einem anderen Zeitpunkt ohne Grund zurückgegeben werden, sodass im Allgemeinen innerhalb einer Schleife aufgerufen werden muss, die Bedingungen nach der Rückgabe erneut überprüft. In diesem Sinne park dient als Optimierung einer "beschäftigten Wartezeit", die nicht so viel Zeit verschwendet, sondern mit einer unpark effektiven kombiniert werden muss.

Die drei Formen unterstützen park jeweils auch einen blocker Objektparameter. Dieses Objekt wird aufgezeichnet, während der Thread blockiert wird, um Überwachungs- und Diagnosetools zu ermöglichen, die Gründe zu identifizieren, aus denen Threads blockiert werden. (Solche Tools können mithilfe der Methode #getBlocker(Thread)auf Blocker zugreifen.) Die Verwendung dieser Formulare anstelle der ursprünglichen Formulare ohne diesen Parameter wird dringend empfohlen. Das normale Argument, das als blocker Eine in einer Sperrimplementierung bereitgestellt werden soll, ist this.

Diese Methoden sind so konzipiert, dass sie als Tools zum Erstellen von Synchronisierungshilfsprogrammen auf höherer Ebene verwendet werden und für die meisten Parallelitätssteuerungsanwendungen nicht nützlich sind. Die park Methode ist nur für Konstruktionen der Form vorgesehen:

{@code
            while (!canProceed()) {
              // ensure request to unpark is visible to other threads
              ...
              LockSupport.park(this);
            }}

wenn keine Aktionen durch den Thread, der eine Anforderung veröffentlicht, zu entparken, vor dem Aufruf park, zum Sperren oder Blockieren führen. Da jedem Thread nur eine Genehmigung zugeordnet ist, kann jede zwischengeschaltete Verwendung park, einschließlich implizit über das Laden der Klasse, zu einem nicht reagierenden Thread führen (ein "verlorener Unpark").

<b>Beispielverwendung.</b> Hier ist eine Skizze einer first-in-first-out nicht erneuten Sperrklasse:

{@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;
              }
            }}

Hinzugefügt in 1.5.

Java-Dokumentation für java.util.concurrent.locks.LockSupport.

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

LockSupport(IntPtr, JniHandleOwnership)

Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Laufzeit aufgerufen.

Eigenschaften

Class

Gibt die Laufzeitklasse dieses Werts Objectzurück.

(Geerbt von Object)
Handle

Das Handle für die zugrunde liegende Android-Instanz.

(Geerbt von Object)
JniIdentityHashCode

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
JniPeerMembers

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

PeerReference

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

Methoden

Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
Dispose()

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
Dispose(Boolean)

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
Equals(Object)

Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist.

(Geerbt von Object)
GetBlocker(Thread)

Gibt das Blockerobjekt zurück, das an den letzten Aufruf einer Parkmethode übergeben wird, die noch nicht blockiert wurde, oder null, wenn sie nicht blockiert wurde.

GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind.

(Geerbt von Object)
Notify()

Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten.

(Geerbt von Object)
Park()

Deaktiviert den aktuellen Thread für Threadplanungszwecke, es sei denn, die Genehmigung ist verfügbar.

Park(Object)

Deaktiviert den aktuellen Thread für Threadplanungszwecke, es sei denn, die Genehmigung ist verfügbar.

ParkNanos(Int64)

Deaktiviert den aktuellen Thread für Threadplanungszwecke für bis zu der angegebenen Wartezeit, es sei denn, die Genehmigung ist verfügbar.

ParkNanos(Object, Int64)

Deaktiviert den aktuellen Thread für Threadplanungszwecke für bis zu der angegebenen Wartezeit, es sei denn, die Genehmigung ist verfügbar.

ParkUntil(Int64)

Deaktiviert den aktuellen Thread für Threadplanungszwecke bis zum angegebenen Stichtag, es sei denn, die Genehmigung ist verfügbar.

ParkUntil(Object, Int64)

Deaktiviert den aktuellen Thread für Threadplanungszwecke bis zum angegebenen Stichtag, es sei denn, die Genehmigung ist verfügbar.

SetCurrentBlocker(Object)

Legt das Objekt fest, das durch Aufrufe #getBlocker getBlocker des aktuellen Threads zurückgegeben werden soll.

SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
ToArray<T>()

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
Unpark(Thread)

Stellt die Genehmigung für den angegebenen Thread zur Verfügung, sofern sie noch nicht verfügbar war.

UnregisterFromRuntime()

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em> oder <em>unterbrochen</em>.<><

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
IJavaPeerable.Finalized()

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

GetJniTypeName(IJavaPeerable)

Grundlegende Threadblockierungsgrundtypen zum Erstellen von Sperren und anderen Synchronisierungsklassen.

Gilt für: