ForkJoinPool Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Oggetto ExecutorService
per l'esecuzione ForkJoinTask
di 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
- Ereditarietà
- Attributi
Commenti
Oggetto ExecutorService
per l'esecuzione ForkJoinTask
di s. Un ForkJoinPool
oggetto fornisce il punto di ingresso per gli invii da client nonForkJoinTask
, nonché operazioni di gestione e monitoraggio.
Un ForkJoinPool
oggetto è diverso da altri tipi di ExecutorService
principalmente in virtù dell'uso <di em>work-stealing</em>: tutti i thread nel pool tentano di trovare ed eseguire attività inviate al pool e/o create da altre attività attive (alla fine bloccano l'attesa del lavoro se non esistono). Ciò consente un'elaborazione efficiente quando la maggior parte delle attività genera altre sottoattività (come la maggior ForkJoinTask
parte delle operazioni), nonché quando molte piccole attività vengono inviate al pool da client esterni. In particolare quando si imposta <em>asyncMode</em> su true nei costruttori, ForkJoinPool
s può anche essere appropriato per l'uso con attività di tipo evento che non vengono mai unite in join. Tutti i thread di lavoro vengono inizializzati con Thread#isDaemon
set true
.
Una statica #commonPool()
è disponibile e appropriata per la maggior parte delle applicazioni. Il pool comune viene usato da qualsiasi ForkJoinTask che non viene inviato in modo esplicito a un pool specificato. L'uso del pool comune riduce in genere l'utilizzo delle risorse (i relativi thread vengono recuperati lentamente durante i periodi di non utilizzo e ripristinati in seguito all'uso successivo).
Per le applicazioni che richiedono pool separati o personalizzati, un ForkJoinPool
oggetto può essere costruito con un determinato livello di parallelismo di destinazione. Per impostazione predefinita, uguale al numero di processori disponibili. Il pool tenta di mantenere thread attivi (o disponibili) sufficienti aggiungendo, sospendendo o riprendendo thread di lavoro interni in modo dinamico, anche se alcune attività sono in attesa di join di altre. Tuttavia, tali rettifiche non sono garantite a fronte di operazioni di I/O bloccate o di altre sincronizzazioni non gestite. L'interfaccia nidificata ManagedBlocker
consente l'estensione dei tipi di sincronizzazione distribuiti. È possibile eseguire l'override dei criteri predefiniti usando un costruttore con parametri corrispondenti a quelli documentati nella classe ThreadPoolExecutor
.
Oltre ai metodi di esecuzione e controllo del ciclo di vita, questa classe fornisce metodi di controllo dello stato (ad esempio #getStealCount
) che consentono di sviluppare, ottimizzare e monitorare le applicazioni fork/join. Inoltre, il metodo #toString
restituisce indicazioni dello stato del pool in un formato pratico per il monitoraggio informale.
Come accade con altri ExecutorServices, nella tabella seguente sono riepilogati tre metodi principali di esecuzione delle attività. Questi elementi sono progettati per essere usati principalmente dai client non già impegnati nei calcoli fork/join nel pool corrente. Le forme principali di questi metodi accettano istanze di ForkJoinTask
, ma i moduli di overload consentono anche l'esecuzione mista di attività semplici Runnable
o Callable
basate su . Tuttavia, le attività già in esecuzione in un pool devono in genere usare i moduli di calcolo all'interno elencati nella tabella, a meno che non si usino attività di tipo evento asincrone che non sono in genere unite in join, nel qual caso esiste poca differenza tra i metodi scelti.
<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<>><th<> scope="row" style="text-align:left>"> Arrange async execution</th><td<#execute(ForkJoinTask)
>/td<>ForkJoinTask#fork
/td>><><</Tr><tr>th scope="row" style="text-align:left" Await e ottenere result</th><td>#invoke(ForkJoinTask)
</td td>><ForkJoinTask#invoke
</td<>/tr tr><<>th scope="row" style="text-align:left">> Arrange exec e ottenere Future</th><td<>#submit(ForkJoinTask)
/td td><ForkJoinTask#fork
> (ForkJoinTasks <em are</em>> Futures)</td/td/td><><<>
I parametri usati per costruire il pool comune possono essere controllati impostando le proprietà di sistema System#getProperty seguenti: <ul><li>java.util.concurrent.ForkJoinPool.common.parallelism
, il livello di parallelismo, un numero intero intero <non negativo li>java.util.concurrent.ForkJoinPool.common.threadFactory
, il nome della classe di un ForkJoinWorkerThreadFactory
oggetto . Il caricatore della classe di sistema ClassLoader#getSystemClassLoader() viene usato per caricare questa classe. <li>java.util.concurrent.ForkJoinPool.common.exceptionHandler
: nome della classe di un oggetto UncaughtExceptionHandler
. Il caricatore della classe di sistema ClassLoader#getSystemClassLoader() viene usato per caricare questa classe. <li>java.util.concurrent.ForkJoinPool.common.maximumSpares
: numero massimo di thread aggiuntivi consentiti per mantenere il parallelismo di destinazione (impostazione predefinita 256). </ul> Se non viene fornita alcuna factory di thread tramite una proprietà di sistema, il pool comune usa una factory che usa il caricatore della classe di sistema come caricatore di classi di sistema come caricatore della classe di contesto del thread Thread#getContextClassLoader(). Inoltre, se è presente , SecurityManager
il pool comune usa una factory che fornisce thread che non dispongono di alcuna Permissions
abilitazione.
In caso di errore durante la definizione di queste impostazioni, vengono usati i parametri predefiniti. È possibile disabilitare o limitare l'uso di thread nel pool comune impostando la proprietà parallelism su zero e/o usando una factory che può restituire null
. Tuttavia, questa operazione può causare l'esecuzione di attività non unite.
<b>Note sull'implementazione:</b> Questa implementazione limita il numero massimo di thread in esecuzione a 32767. Tenta di creare pool con un numero maggiore del numero massimo risultante in IllegalArgumentException
.
Questa implementazione rifiuta le attività inviate, ovvero generando RejectedExecutionException
, solo quando il pool viene arrestato o le risorse interne sono state esaurite.
Aggiunta nella versione 1.7.
Documentazione java per java.util.concurrent.ForkJoinPool
.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.
Costruttori
ForkJoinPool() |
Crea un |
ForkJoinPool(Int32) |
Crea un |
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
Crea un |
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
Oggetto |
ForkJoinPool(IntPtr, JniHandleOwnership) |
Costruttore usato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime. |
Proprietà
ActiveThreadCount |
Restituisce una stima del numero di thread che attualmente rubano o eseguono attività. |
AsyncMode |
Restituisce |
Class |
Restituisce la classe di runtime di questo |
CommonPoolParallelism |
Restituisce il livello di parallelismo di destinazione del pool comune. |
DefaultForkJoinWorkerThreadFactory |
Crea un nuovo ForkJoinWorkerThread. |
Factory |
Restituisce la factory utilizzata per la costruzione di nuovi ruoli di lavoro. |
Handle |
Handle per l'istanza di Android sottostante. (Ereditato da Object) |
HasQueuedSubmissions |
Restituisce |
IsQuiescent |
Restituisce |
IsShutdown |
Restituisce |
IsTerminated |
Restituisce |
IsTerminating |
Restituisce |
JniIdentityHashCode |
Oggetto |
JniPeerMembers |
Oggetto |
Parallelism |
Restituisce il livello di parallelismo di destinazione di questo pool. |
PeerReference |
Oggetto |
PoolSize |
Restituisce il numero di thread di lavoro avviati ma non ancora terminati. |
QueuedSubmissionCount |
Restituisce una stima del numero di attività inviate a questo pool che non hanno ancora iniziato l'esecuzione. |
QueuedTaskCount |
Restituisce una stima del numero totale di attività attualmente mantenute nelle code dai thread di lavoro ( ma non incluse le attività inviate al pool che non hanno iniziato l'esecuzione). |
RunningThreadCount |
Restituisce una stima del numero di thread di lavoro che non sono bloccati in attesa di attività di join o per altre sincronizzazioni gestite. |
StealCount |
Restituisce una stima del numero totale di attività completate eseguite da un thread diverso dal mittente. |
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. |
UncaughtExceptionHandler |
Restituisce il gestore per i thread di lavoro interni che terminano a causa di errori irreversibili rilevati durante l'esecuzione delle attività. |
Metodi
AwaitQuiescence(Int64, TimeUnit) |
Se viene chiamato da un forkJoinTask che opera in questo pool, equivalente in effetti a |
AwaitTermination(Int64, TimeUnit) |
Blocca fino a quando tutte le attività non hanno completato l'esecuzione dopo una richiesta di arresto o si verifica il timeout oppure il thread corrente viene interrotto, a condizione che si verifichi per primo. |
AwaitTerminationAsync(Int64, TimeUnit) |
Oggetto |
Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
CommonPool() |
Restituisce l'istanza del pool comune. |
Dispose() |
Oggetto |
Dispose(Boolean) |
Oggetto |
DrainTasksTo(ICollection<ForkJoinTask>) |
Rimuove tutte le attività inviate e fork non eseguite disponibili dalle code di pianificazione e le aggiunge alla raccolta specificata, senza modificarne lo stato di esecuzione. |
Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
Execute(ForkJoinTask) |
Dispone l'esecuzione (asincrona) dell'attività specificata. |
Execute(IRunnable) | |
GetHashCode() |
Restituisce un valore del codice hash per l'oggetto. (Ereditato da Object) |
Invoke(ForkJoinTask) |
Esegue l'attività specificata, restituendo il risultato al completamento. |
InvokeAll(ICollection) |
Oggetto |
InvokeAll(ICollection, Int64, TimeUnit) |
Oggetto |
InvokeAny(ICollection) |
Oggetto |
InvokeAny(ICollection, Int64, TimeUnit) |
Oggetto |
JavaFinalize() |
Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto . (Ereditato da Object) |
ManagedBlock(ForkJoinPool+IManagedBlocker) |
Esegue l'attività di blocco specificata. |
NewTaskFor(ICallable) |
Restituisce un oggetto |
NewTaskFor(IRunnable, Object) |
Restituisce un |
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) |
PollSubmission() |
Rimuove e restituisce l'invio successivo non eseguito, se disponibile. |
SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
Shutdown() |
È possibile avviare un arresto ordinato in cui vengono eseguite le attività inviate in precedenza, ma non verranno accettate nuove attività. |
ShutdownNow() |
È possibile tentare di annullare e/o arrestare tutte le attività e rifiutare tutte le attività inviate successivamente. |
Submit(ForkJoinTask) |
Invia un forkJoinTask per l'esecuzione. |
Submit(ICallable) |
Oggetto |
Submit(IRunnable) |
Invia un'attività eseguibile per l'esecuzione e restituisce un oggetto Future che rappresenta tale attività. (Ereditato da AbstractExecutorService) |
Submit(IRunnable, Object) |
Oggetto |
ToArray<T>() |
Oggetto |
ToString() |
Restituisce una rappresentazione di stringa dell'oggetto. (Ereditato da Object) |
UnregisterFromRuntime() |
Oggetto |
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) |
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, 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) |
Implementazioni dell'interfaccia esplicita
IJavaPeerable.Disposed() |
Oggetto |
IJavaPeerable.DisposeUnlessReferenced() |
Oggetto |
IJavaPeerable.Finalized() |
Oggetto |
IJavaPeerable.JniManagedPeerState |
Oggetto |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Oggetto |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Oggetto |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Oggetto |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
Oggetto |
GetJniTypeName(IJavaPeerable) |
Oggetto |
AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
Oggetto |
InvokeAnyAsync(IExecutorService, ICollection) |
Oggetto |
InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
Oggetto |