Freigeben über


ForkJoinPool Klasse

Definition

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

[Android.Runtime.Register("java/util/concurrent/ForkJoinPool", DoNotGenerateAcw=true)]
public class ForkJoinPool : Java.Util.Concurrent.AbstractExecutorService
[<Android.Runtime.Register("java/util/concurrent/ForkJoinPool", DoNotGenerateAcw=true)>]
type ForkJoinPool = class
    inherit AbstractExecutorService
Vererbung
Attribute

Hinweise

Eine ExecutorService für die Ausführung ForkJoinTaskvon s. A ForkJoinPool stellt den Einstiegspunkt für Übermittlungen von NichtclientsForkJoinTask sowie Verwaltungs- und Überwachungsvorgängen bereit.

Eine ForkJoinPool unterscheidet sich von anderen Arten von ExecutorService hauptsächlich durch die Verwendung <von em>work-stealing</em>: alle Threads im Pool versuchen, Aufgaben zu finden und auszuführen, die an den Pool übermittelt wurden und/oder von anderen aktiven Aufgaben erstellt werden (schließlich blockieren, warten auf Arbeit, wenn keine vorhanden ist). Dies ermöglicht eine effiziente Verarbeitung, wenn die meisten Vorgänge andere Teilvorgänge (wie die meisten ForkJoinTask) und wenn viele kleine Vorgänge von externen Clients an den Pool übermittelt werden. Insbesondere beim Festlegen von <em>asyncMode</em> auf "true" in Konstruktoren ForkJoinPoolist s möglicherweise auch für die Verwendung mit Aufgaben im Ereignisstil geeignet, die nie verknüpft sind. Alle Arbeitsthreads werden mit Thread#isDaemon set trueinitialisiert.

Eine statische #commonPool() Ist für die meisten Anwendungen verfügbar und geeignet. Der gemeinsame Pool wird von allen ForkJoinTask verwendet, die nicht explizit an einen angegebenen Pool übermittelt werden. Die Verwendung des gemeinsamen Pools reduziert normalerweise die Ressourcennutzung (ihre Threads werden während nicht verwendeter Zeiträume langsam zurückgefordert und bei späterer Verwendung wiederverwertet).

Für Anwendungen, die separate oder benutzerdefinierte Pools erfordern, kann eine ForkJoinPool mit einer bestimmten Ziel-Parallelitätsstufe erstellt werden; standardmäßig entspricht die Anzahl der verfügbaren Prozessoren. Der Pool versucht, genügend aktive (oder verfügbare) Threads aufrechtzuerhalten, indem interne Arbeitsthreads dynamisch hinzugefügt, angehalten oder fortgesetzt werden, selbst wenn einige Aufgaben angehalten werden, bis sie anderen beitreten. Aufgrund blockierter E/A- oder anderer nicht verwalteter Synchronisierungen sind jedoch keine derartigen Anpassungen gewährleistet. Die geschachtelte ManagedBlocker Schnittstelle ermöglicht die Erweiterung der Synchronisierungsarten. Die Standardrichtlinien können mithilfe eines Konstruktors mit Parametern überschrieben werden, die den in der Klasse ThreadPoolExecutordokumentierten Parametern entsprechen.

Zusätzlich zu Ausführungs- und Lebenszyklussteuerungsmethoden bietet diese Klasse Statusüberprüfungsmethoden (z. B #getStealCount. ), die bei der Entwicklung, Optimierung und Überwachung von Verzweigungs-/Verknüpfungsanwendungen helfen sollen. Außerdem gibt die Methode #toString Hinweise auf den Poolzustand in einer praktischen Form für die informelle Überwachung zurück.

Wie bei anderen ExecutorServices gibt es drei Hauptaufgabenausführungsmethoden, die in der folgenden Tabelle zusammengefasst sind. Diese sind in erster Linie für Clients gedacht, die noch nicht an Fork-/Join-Berechnungen im aktuellen Pool beteiligt sind. Die Hauptformen dieser Methoden akzeptieren Instanzen von ForkJoinTask, aber überladene Formulare ermöglichen auch die gemischte Ausführung von einfachen Runnable- oder Callable- basierten Aktivitäten. Aufgaben, die bereits in einem Pool ausgeführt werden, sollten jedoch normalerweise die in der Tabelle aufgeführten Berechnungsformulare verwenden, es sei denn, sie verwenden asynchrone Aufgaben im Ereignisstil, die normalerweise nicht verknüpft sind, in diesem Fall gibt es wenig Unterschiede bei der Auswahl von Methoden.

<table class="plain">caption Summary of task execution methods</caption><tr><td></td><th scope="col"> Call from non-fork/join clients</th th><scope="col"> Call from within fork/join computations</th></tr><tr><th scope="row" style="text-align:left"> Arrange async execution</th><td><#execute(ForkJoinTask)/td/td><td/td>ForkJoinTask#fork><><</Tr><tr><th scope="row" style="text-align:left"> Await and obtain result</th<>td/td#invoke(ForkJoinTask)>< td/td<>td/td>><ForkJoinTask#invoke</tr>><<th scope="row" style="text-align:left"> Arrange exec and obtain Future</th><td#submit(ForkJoinTask)<>/td<>tdForkJoinTask#fork> (ForkJoinTasks <em>are</em> Futures)</td<>/tr></table>

Die Parameter, die zum Erstellen des gemeinsamen Pools verwendet werden, können durch Festlegen der folgenden System#getProperty-Systemeigenschaften gesteuert werden: <ul><lijava.util.concurrent.ForkJoinPool.common.parallelism> - die Parallelitätsebene, eine nicht negative ganze <Li>java.util.concurrent.ForkJoinPool.common.threadFactory - der Klassenname eines .ForkJoinWorkerThreadFactory Das Systemklassenladeprogramm "ClassLoader#getSystemClassLoader()" wird verwendet, um diese Klasse zu laden. <li>java.util.concurrent.ForkJoinPool.common.exceptionHandler - der Klassenname eines UncaughtExceptionHandler. Das Systemklassenladeprogramm "ClassLoader#getSystemClassLoader()" wird verwendet, um diese Klasse zu laden. <li>java.util.concurrent.ForkJoinPool.common.maximumSpares - die maximale Anzahl der zulässigen zusätzlichen Threads, um den Zielparallelismus beizubehalten (Standard 256). </ul> If no thread factory is supplied via a system property, then the common pool uses a factory that uses the system class loader as the Thread#getContextClassLoader() thread context class loader. Wenn eine SecurityManager vorhanden ist, verwendet der allgemeine Pool außerdem einen Factory-Bereitstellungsthreads, der nicht Permissions aktiviert ist.

Bei einem Fehler beim Einrichten dieser Einstellungen werden Standardparameter verwendet. Es ist möglich, die Verwendung von Threads im allgemeinen Pool zu deaktivieren oder einzuschränken, indem sie die Parallelitätseigenschaft auf Null festlegen und/oder eine Factory verwenden, die zurückgegeben nullwerden kann. Dies kann jedoch dazu führen, dass nicht zusammenhängende Vorgänge nie ausgeführt werden.

<b>Implementierungshinweise:</b> Diese Implementierung beschränkt die maximale Anzahl ausgeführter Threads auf 32767. Versuche, Pools mit mehr als der maximalen Anzahl zu erstellen, führen zu IllegalArgumentException.

Diese Implementierung lehnt gesendete Vorgänge (d. h. durch Auslösen RejectedExecutionException) nur ab, wenn der Pool heruntergefahren wird oder interne Ressourcen erschöpft wurden.

In 1.7 hinzugefügt.

Java-Dokumentation für java.util.concurrent.ForkJoinPool.

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

ForkJoinPool()

Erstellt einen ForkJoinPool mit Parallelität gleich java.lang.Runtime#availableProcessors, wobei Standardwerte für alle anderen Parameter verwendet werden (siehe #ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

ForkJoinPool(Int32)

Erstellt eine ForkJoinPool mit der angegebenen Parallelitätsebene, wobei Standardwerte für alle anderen Parameter verwendet werden (siehe #ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean)

Erstellt eine ForkJoinPool mit Parallelität gleich java.lang.Runtime#availableProcessors, wobei die #defaultForkJoinWorkerThreadFactory Standardthreadfactory, kein UncaughtExceptionHandler und nicht asynchroner LIFO-Verarbeitungsmodus verwendet wird.

ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

ForkJoinPool(IntPtr, JniHandleOwnership)

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

Eigenschaften

ActiveThreadCount

Gibt eine Schätzung der Anzahl der Threads zurück, die derzeit Vorgänge stehlen oder ausführen.

AsyncMode

Gibt zurück true , wenn dieser Pool den lokalen First-in-First-Out-Planungsmodus für Verzweigungsaufgaben verwendet, die nie verbunden sind.

Class

Gibt die Laufzeitklasse dieses Werts Objectzurück.

(Geerbt von Object)
CommonPoolParallelism

Gibt die zielorientierte Parallelitätsebene des gemeinsamen Pools zurück.

DefaultForkJoinWorkerThreadFactory

Erstellt ein neues ForkJoinWorkerThread.

Factory

Gibt die Fabrik zurück, die zum Erstellen neuer Arbeiter verwendet wird.

Handle

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

(Geerbt von Object)
HasQueuedSubmissions

Gibt zurück true , wenn an diesen Pool gesendete Aufgaben vorhanden sind, die noch nicht mit der Ausführung begonnen haben.

IsQuiescent

Gibt zurück true , wenn alle Arbeitsthreads aktuell im Leerlauf sind.

IsShutdown

Gibt zurück true , wenn dieser Pool heruntergefahren wurde.

IsTerminated

Gibt zurück true , wenn alle Vorgänge nach dem Herunterfahren abgeschlossen wurden.

IsTerminating

Gibt zurück true , wenn der Beendigungsprozess begonnen, aber noch nicht abgeschlossen wurde.

JniIdentityHashCode

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
JniPeerMembers

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

Parallelism

Gibt die zielorientierte Parallelitätsebene dieses Pools zurück.

PeerReference

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
PoolSize

Gibt die Anzahl der Arbeitsthreads zurück, die gestartet, aber noch nicht beendet wurden.

QueuedSubmissionCount

Gibt eine Schätzung der Anzahl der an diesen Pool übermittelten Vorgänge zurück, die noch nicht mit der Ausführung begonnen haben.

QueuedTaskCount

Gibt eine Schätzung der Gesamtzahl der Aufgaben zurück, die derzeit in Warteschlangen von Arbeitsthreads gehalten werden (jedoch nicht einschließlich aufgaben, die an den Pool übermittelt wurden, die nicht mit der Ausführung begonnen haben).

RunningThreadCount

Gibt eine Schätzung der Anzahl der Arbeitsthreads zurück, die nicht blockiert werden, bis Sie Aufgaben verknüpfen oder für andere verwaltete Synchronisierungen warten.

StealCount

Gibt eine Schätzung der Gesamtanzahl der abgeschlossenen Aufgaben zurück, die von einem anderen Thread als ihrem Submitter ausgeführt wurden.

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.

UncaughtExceptionHandler

Gibt den Handler für interne Arbeitsthreads zurück, die aufgrund nicht behebbarer Fehler beim Ausführen von Aufgaben beendet werden.

Methoden

AwaitQuiescence(Int64, TimeUnit)

Wenn von einem ForkJoinTask aufgerufen wird, der in diesem Pool ausgeführt wird, entspricht dies in Wirkung zu ForkJoinTask#helpQuiesce.

AwaitTermination(Int64, TimeUnit)

Blockiert die Ausführung aller Aufgaben nach einer Herunterfahren-Anforderung oder das Timeout, oder der aktuelle Thread wird unterbrochen, je nachdem, was zuerst geschieht.

AwaitTerminationAsync(Int64, TimeUnit)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von AbstractExecutorService)
Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
CommonPool()

Gibt die gemeinsame Poolinstanz zurück.

Dispose()

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
Dispose(Boolean)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
DrainTasksTo(ICollection<ForkJoinTask>)

Entfernt alle verfügbaren nicht ausgeführten gesendeten und verzweigten Aufgaben aus der Terminplanungswarteschlange und fügt sie der angegebenen Auflistung hinzu, ohne den Ausführungsstatus zu ändern.

Equals(Object)

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

(Geerbt von Object)
Execute(ForkJoinTask)

Ordnet die (asynchrone) Ausführung der angegebenen Aufgabe an.

Execute(IRunnable)
GetHashCode()

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

(Geerbt von Object)
Invoke(ForkJoinTask)

Führt den angegebenen Vorgang aus und gibt sein Ergebnis nach Abschluss zurück.

InvokeAll(ICollection)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von AbstractExecutorService)
InvokeAll(ICollection, Int64, TimeUnit)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von AbstractExecutorService)
InvokeAny(ICollection)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von AbstractExecutorService)
InvokeAny(ICollection, Int64, TimeUnit)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von AbstractExecutorService)
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)
ManagedBlock(ForkJoinPool+IManagedBlocker)

Führt die angegebene möglicherweise blockierende Aufgabe aus.

NewTaskFor(ICallable)

Gibt einen RunnableFuture Wert für den angegebenen aufrufbaren Vorgang zurück.

(Geerbt von AbstractExecutorService)
NewTaskFor(IRunnable, Object)

Gibt einen RunnableFuture Wert für den angegebenen Runnable- und Standardwert zurück.

(Geerbt von AbstractExecutorService)
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)
PollSubmission()

Entfernt und gibt die nächste nicht ausgeführte Übermittlung zurück, wenn eine verfügbar ist.

SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
Shutdown()

Initiiert möglicherweise ein geordnetes Herunterfahren, in dem zuvor übermittelte Aufgaben ausgeführt werden, aber keine neuen Vorgänge werden akzeptiert.

ShutdownNow()

Möglicherweise versucht, alle Vorgänge abzubrechen und/oder zu beenden, und alle anschließend übermittelten Vorgänge abzulehnen.

Submit(ForkJoinTask)

Sendet eine ForkJoinTask zur Ausführung.

Submit(ICallable)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von AbstractExecutorService)
Submit(IRunnable)

Sendet eine ausführungsfähige Aufgabe und gibt eine Zukunft zurück, die diese Aufgabe darstellt.

(Geerbt von AbstractExecutorService)
Submit(IRunnable, Object)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von AbstractExecutorService)
ToArray<T>()

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

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

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

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
IJavaPeerable.Finalized()

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

GetJniTypeName(IJavaPeerable)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

AwaitTerminationAsync(IExecutorService, Int64, TimeUnit)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

InvokeAnyAsync(IExecutorService, ICollection)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit)

Eine ExecutorService für die Ausführung ForkJoinTaskvon s.

Gilt für: