Compartir a través de


ForkJoinPool Clase

Definición

para ExecutorService ejecutar ForkJoinTasks.

[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
Herencia
Atributos

Comentarios

para ExecutorService ejecutar ForkJoinTasks. proporciona ForkJoinPool el punto de entrada para envíos de clientes que noForkJoinTask son clientes, así como operaciones de administración y supervisión.

Difiere ForkJoinPool de otros tipos de ExecutorService principalmente en virtud de emplear <em>work-stealing</em>: todos los subprocesos del grupo intentan encontrar y ejecutar tareas enviadas al grupo o creadas por otras tareas activas (al final bloqueando la espera de trabajo si no existe ninguna). Esto permite un procesamiento eficaz cuando la mayoría de las tareas generan otras subtareas (como la mayoría ForkJoinTask), así como cuando se envían muchas tareas pequeñas al grupo desde clientes externos. Especialmente cuando se establece <em>asyncMode</em> en true en constructores, ForkJoinPooles posible que también sea adecuado para su uso con tareas de estilo de evento que nunca se unen. Todos los subprocesos de trabajo se inicializan con Thread#isDaemon set true.

Hay disponible una estática #commonPool() y adecuada para la mayoría de las aplicaciones. ForkJoinTask usa el grupo común que no se envía explícitamente a un grupo especificado. El uso del grupo común normalmente reduce el uso de recursos (sus subprocesos se recuperan lentamente durante períodos de no uso y se restablece tras su uso posterior).

En el caso de las aplicaciones que requieren grupos independientes o personalizados, ForkJoinPool se puede construir con un nivel de paralelismo de destino determinado; de forma predeterminada, es igual al número de procesadores disponibles. El grupo intenta mantener suficientes subprocesos activos (o disponibles) agregando, suspendiendo o reanudando subprocesos de trabajo internos de forma dinámica, incluso si algunas tareas están bloqueadas esperando unirse a otras. Sin embargo, no se garantiza ningún ajuste en la cara de la E/S bloqueada u otra sincronización no administrada. La interfaz anidada ManagedBlocker permite la extensión de los tipos de sincronización que se admiten. Las directivas predeterminadas se pueden invalidar mediante un constructor con parámetros correspondientes a los documentados en la clase ThreadPoolExecutor.

Además de los métodos de control de ciclo de vida y ejecución, esta clase proporciona métodos de comprobación de estado (por ejemplo #getStealCount) diseñados para ayudar a desarrollar, optimizar y supervisar aplicaciones de bifurcación o unión. Además, el método #toString devuelve indicaciones de estado del grupo en una forma cómoda para la supervisión informal.

Como sucede con otros ExecutorServices, hay tres métodos principales de ejecución de tareas resumidos en la tabla siguiente. Estos están diseñados para usarse principalmente por los clientes que aún no participan en cálculos de bifurcación o combinación en el grupo actual. Las formas principales de estos métodos aceptan instancias de ForkJoinTask, pero las formas sobrecargadas también permiten la ejecución mixta de actividades sin formato Runnableo Callablebasadas en . Sin embargo, las tareas que ya se ejecutan en un grupo normalmente deben usar los formularios de cálculo dentro de la tabla, a menos que usen tareas asincrónicas de estilo de evento que no estén normalmente unidas, en cuyo caso hay poca diferencia entre la elección de métodos.

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

Los parámetros que se usan para construir el grupo común se pueden controlar estableciendo las siguientes propiedades del sistema System#getProperty: <ul><lijava.util.concurrent.ForkJoinPool.common.parallelism> : el nivel de paralelismo, un liger>java.util.concurrent.ForkJoinPool.common.threadFactory entero <no negativo: el nombre de clase de .ForkJoinWorkerThreadFactory El cargador de clases del sistema ClassLoader#getSystemClassLoader() se usa para cargar esta clase. <li>java.util.concurrent.ForkJoinPool.common.exceptionHandler: el nombre de clase de .UncaughtExceptionHandler El cargador de clases del sistema ClassLoader#getSystemClassLoader() se usa para cargar esta clase. <li:>java.util.concurrent.ForkJoinPool.common.maximumSpares el número máximo de subprocesos adicionales permitidos para mantener el paralelismo de destino (valor predeterminado 256). </ul> Si no se proporciona ningún generador de subprocesos a través de una propiedad del sistema, el grupo común usa un generador que usa el cargador de clases del sistema como cargador de clases de subproceso Thread#getContextClassLoader(). Además, si está presente, SecurityManager el grupo común usa un generador que proporciona subprocesos que no Permissions tienen habilitado.

Tras cualquier error al establecer esta configuración, se usan parámetros predeterminados. Es posible deshabilitar o limitar el uso de subprocesos en el grupo común estableciendo la propiedad parallelism en cero o usando un generador que pueda devolver null. Sin embargo, si lo hace, puede provocar que nunca se ejecuten tareas no unidas.

<b>Notas de implementación:</b> Esta implementación restringe el número máximo de subprocesos en ejecución a 32767. Los intentos de crear grupos con un número mayor que el número máximo dan como IllegalArgumentExceptionresultado .

Esta implementación rechaza las tareas enviadas (es decir, iniciando RejectedExecutionException) solo cuando se cierra el grupo o se han agotado los recursos internos.

Agregado en la versión 1.7.

Documentación de Java para java.util.concurrent.ForkJoinPool.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Constructores

ForkJoinPool()

Crea un con paralelismo ForkJoinPool igual a java.lang.Runtime#availableProcessors, utilizando los valores predeterminados para todos los demás parámetros (vea #ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

ForkJoinPool(Int32)

Crea un ForkJoinPool objeto con el nivel de paralelismo indicado, utilizando los valores predeterminados para todos los demás parámetros (vea #ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

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

Crea un con paralelismo ForkJoinPool igual a java.lang.Runtime#availableProcessors, mediante el #defaultForkJoinWorkerThreadFactory generador de subprocesos predeterminado, sin UncaughtExceptionHandler y el modo de procesamiento LIFO no asincrónico.

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

para ExecutorService ejecutar ForkJoinTasks.

ForkJoinPool(IntPtr, JniHandleOwnership)

Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución.

Propiedades

ActiveThreadCount

Devuelve una estimación del número de subprocesos que están robando o ejecutando tareas actualmente.

AsyncMode

Devuelve true si este grupo usa las tareas bifurcadas locales en el modo de programación de primer en salir que nunca están unidas.

Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
CommonPoolParallelism

Devuelve el nivel de paralelismo de destino del grupo común.

DefaultForkJoinWorkerThreadFactory

Crea un nuevo ForkJoinWorkerThread.

Factory

Devuelve el generador usado para construir nuevos trabajos.

Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
HasQueuedSubmissions

Devuelve true si hay tareas enviadas a este grupo que aún no han comenzado a ejecutarse.

IsQuiescent

Devuelve true si todos los subprocesos de trabajo están inactivos actualmente.

IsShutdown

Devuelve true si se ha cerrado este grupo.

IsTerminated

Devuelve true si todas las tareas se han completado después de apagarse.

IsTerminating

Devuelve true si el proceso de finalización ha comenzado, pero aún no se ha completado.

JniIdentityHashCode

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
JniPeerMembers

para ExecutorService ejecutar ForkJoinTasks.

Parallelism

Devuelve el nivel de paralelismo de destino de este grupo.

PeerReference

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
PoolSize

Devuelve el número de subprocesos de trabajo que se han iniciado pero que aún no han finalizado.

QueuedSubmissionCount

Devuelve una estimación del número de tareas enviadas a este grupo que aún no han comenzado a ejecutarse.

QueuedTaskCount

Devuelve una estimación del número total de tareas mantenidas actualmente en colas por subprocesos de trabajo (pero no incluidas las tareas enviadas al grupo que no han comenzado a ejecutarse).

RunningThreadCount

Devuelve una estimación del número de subprocesos de trabajo que no están bloqueados esperando unirse a tareas o para otra sincronización administrada.

StealCount

Devuelve una estimación del número total de tareas completadas ejecutadas por un subproceso distinto de su remitente.

ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

UncaughtExceptionHandler

Devuelve el controlador de los subprocesos de trabajo internos que finalizan debido a errores irrecuperables detectados durante la ejecución de tareas.

Métodos

AwaitQuiescence(Int64, TimeUnit)

Si lo llama un forkJoinTask que funciona en este grupo, equivale a ForkJoinTask#helpQuiesce.

AwaitTermination(Int64, TimeUnit)

Bloquea hasta que todas las tareas se hayan completado la ejecución después de una solicitud de cierre, o el tiempo de espera se produzca o se interrumpa el subproceso actual, lo que ocurra primero.

AwaitTerminationAsync(Int64, TimeUnit)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de AbstractExecutorService)
Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
CommonPool()

Devuelve la instancia de grupo común.

Dispose()

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
Dispose(Boolean)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
DrainTasksTo(ICollection<ForkJoinTask>)

Quita todas las tareas enviadas y bifurcadas disponibles de la programación de colas y las agrega a la colección dada, sin modificar su estado de ejecución.

Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
Execute(ForkJoinTask)

Organiza la ejecución (asincrónica) de la tarea especificada.

Execute(IRunnable)
GetHashCode()

Devuelve un valor de código hash del objeto.

(Heredado de Object)
Invoke(ForkJoinTask)

Realiza la tarea especificada y devuelve su resultado tras la finalización.

InvokeAll(ICollection)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de AbstractExecutorService)
InvokeAll(ICollection, Int64, TimeUnit)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de AbstractExecutorService)
InvokeAny(ICollection)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de AbstractExecutorService)
InvokeAny(ICollection, Int64, TimeUnit)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de AbstractExecutorService)
JavaFinalize()

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
ManagedBlock(ForkJoinPool+IManagedBlocker)

Ejecuta la tarea posiblemente de bloqueo especificada.

NewTaskFor(ICallable)

Devuelve un RunnableFuture para la tarea invocable especificada.

(Heredado de AbstractExecutorService)
NewTaskFor(IRunnable, Object)

Devuelve un RunnableFuture para el valor runnable y predeterminado especificados.

(Heredado de AbstractExecutorService)
Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
PollSubmission()

Quita y devuelve el siguiente envío sin ejecutar si hay uno disponible.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
Shutdown()

Posiblemente inicia un apagado ordenado en el que se ejecutan las tareas enviadas anteriormente, pero no se aceptarán nuevas tareas.

ShutdownNow()

Posiblemente intente cancelar o detener todas las tareas y rechazar todas las tareas enviadas posteriormente.

Submit(ForkJoinTask)

Envía un ForkJoinTask para su ejecución.

Submit(ICallable)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de AbstractExecutorService)
Submit(IRunnable)

Envía una tarea runnable para su ejecución y devuelve un valor Future que representa esa tarea.

(Heredado de AbstractExecutorService)
Submit(IRunnable, Object)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de AbstractExecutorService)
ToArray<T>()

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto.

(Heredado de Object)
UnregisterFromRuntime()

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em> o <em>interrumpido</em>.<><

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)

Implementaciones de interfaz explícitas

IJavaPeerable.Disposed()

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
IJavaPeerable.DisposeUnlessReferenced()

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
IJavaPeerable.Finalized()

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
IJavaPeerable.JniManagedPeerState

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

para ExecutorService ejecutar ForkJoinTasks.

(Heredado de Object)

Métodos de extensión

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

para ExecutorService ejecutar ForkJoinTasks.

GetJniTypeName(IJavaPeerable)

para ExecutorService ejecutar ForkJoinTasks.

AwaitTerminationAsync(IExecutorService, Int64, TimeUnit)

para ExecutorService ejecutar ForkJoinTasks.

InvokeAnyAsync(IExecutorService, ICollection)

para ExecutorService ejecutar ForkJoinTasks.

InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit)

para ExecutorService ejecutar ForkJoinTasks.

Se aplica a