ForkJoinPool 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.
Eine ExecutorService
für die Ausführung ForkJoinTask
von 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 ForkJoinTask
von 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 ForkJoinPool
ist 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 true
initialisiert.
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 ThreadPoolExecutor
dokumentierten 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 null
werden 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(Int32) |
Erstellt eine |
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
Erstellt eine |
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
Eine |
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 |
Class |
Gibt die Laufzeitklasse dieses Werts |
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 |
IsQuiescent |
Gibt zurück |
IsShutdown |
Gibt zurück |
IsTerminated |
Gibt zurück |
IsTerminating |
Gibt zurück |
JniIdentityHashCode |
Eine |
JniPeerMembers |
Eine |
Parallelism |
Gibt die zielorientierte Parallelitätsebene dieses Pools zurück. |
PeerReference |
Eine |
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 |
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 |
Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von Object) |
CommonPool() |
Gibt die gemeinsame Poolinstanz zurück. |
Dispose() |
Eine |
Dispose(Boolean) |
Eine |
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 |
InvokeAll(ICollection, Int64, TimeUnit) |
Eine |
InvokeAny(ICollection) |
Eine |
InvokeAny(ICollection, Int64, TimeUnit) |
Eine |
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 |
NewTaskFor(IRunnable, Object) |
Gibt einen |
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 |
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 |
ToArray<T>() |
Eine |
ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
UnregisterFromRuntime() |
Eine |
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 |
IJavaPeerable.DisposeUnlessReferenced() |
Eine |
IJavaPeerable.Finalized() |
Eine |
IJavaPeerable.JniManagedPeerState |
Eine |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Eine |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Eine |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Eine |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
JavaCast<TResult>(IJavaObject) |
Eine |
GetJniTypeName(IJavaPeerable) |
Eine |
AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
Eine |
InvokeAnyAsync(IExecutorService, ICollection) |
Eine |
InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
Eine |