Condividi tramite


ForkJoinPool Classe

Definizione

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi 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 ForkJoinTaskdi 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 ForkJoinTaskparte 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, ForkJoinPools 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 Runnableo Callablebasate 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 ForkJoinWorkerThreadFactoryoggetto . 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 oggetto con parallelismo uguale a java.lang.Runtime#availableProcessors, usando le impostazioni predefinite per tutti gli altri parametri (vedere #ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

ForkJoinPool(Int32)

Crea un ForkJoinPool oggetto con il livello di parallelismo indicato, usando le impostazioni predefinite per tutti gli altri parametri (vedere #ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

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

Crea un ForkJoinPool oggetto con parallelismo uguale a java.lang.Runtime#availableProcessors, utilizzando la #defaultForkJoinWorkerThreadFactory factory di thread predefinita, nessuna classe UncaughtExceptionHandler e la modalità di elaborazione LIFO non asincrona.

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

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

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 true se questo pool utilizza la modalità di pianificazione first-in-first-out locale per le attività fork che non vengono mai unite in join.

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
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 true se sono presenti attività inviate a questo pool che non hanno ancora iniziato l'esecuzione.

IsQuiescent

Restituisce true se tutti i thread di lavoro sono attualmente inattive.

IsShutdown

Restituisce true se il pool è stato arrestato.

IsTerminated

Restituisce true se tutte le attività sono state completate dopo l'arresto.

IsTerminating

Restituisce true se il processo di terminazione ha inizio ma non è ancora stato completato.

JniIdentityHashCode

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
JniPeerMembers

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

Parallelism

Restituisce il livello di parallelismo di destinazione di questo pool.

PeerReference

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
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 ForkJoinTask#helpQuiesce.

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 ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da AbstractExecutorService)
Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
CommonPool()

Restituisce l'istanza del pool comune.

Dispose()

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
Dispose(Boolean)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
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 ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da AbstractExecutorService)
InvokeAll(ICollection, Int64, TimeUnit)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da AbstractExecutorService)
InvokeAny(ICollection)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da AbstractExecutorService)
InvokeAny(ICollection, Int64, TimeUnit)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da AbstractExecutorService)
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 RunnableFuture per l'attività chiamabile specificata.

(Ereditato da AbstractExecutorService)
NewTaskFor(IRunnable, Object)

Restituisce un RunnableFuture oggetto per il valore predefinito e eseguibile specificato.

(Ereditato da AbstractExecutorService)
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 ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da AbstractExecutorService)
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 ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da AbstractExecutorService)
ToArray<T>()

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione di stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
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 ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
IJavaPeerable.Finalized()

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

GetJniTypeName(IJavaPeerable)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

AwaitTerminationAsync(IExecutorService, Int64, TimeUnit)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

InvokeAnyAsync(IExecutorService, ICollection)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit)

Oggetto ExecutorService per l'esecuzione ForkJoinTaskdi s.

Si applica a