LockSupport Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- 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 |
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 |
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. |