ForkJoinPool Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
para ExecutorService
ejecutar ForkJoinTask
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
- Herencia
- Atributos
Comentarios
para ExecutorService
ejecutar ForkJoinTask
s. 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, ForkJoinPool
es 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 Runnable
o Callable
basadas 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 IllegalArgumentException
resultado .
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(Int32) |
Crea un |
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
Crea un con paralelismo |
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
para |
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 |
Class |
Devuelve la clase en tiempo de ejecución de este |
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 |
IsQuiescent |
Devuelve |
IsShutdown |
Devuelve |
IsTerminated |
Devuelve |
IsTerminating |
Devuelve |
JniIdentityHashCode |
para |
JniPeerMembers |
para |
Parallelism |
Devuelve el nivel de paralelismo de destino de este grupo. |
PeerReference |
para |
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 |
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 |
Clone() |
Crea y devuelve una copia de este objeto. (Heredado de Object) |
CommonPool() |
Devuelve la instancia de grupo común. |
Dispose() |
para |
Dispose(Boolean) |
para |
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 |
InvokeAll(ICollection, Int64, TimeUnit) |
para |
InvokeAny(ICollection) |
para |
InvokeAny(ICollection, Int64, TimeUnit) |
para |
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 |
NewTaskFor(IRunnable, Object) |
Devuelve un |
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 |
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 |
ToArray<T>() |
para |
ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
UnregisterFromRuntime() |
para |
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 |
IJavaPeerable.DisposeUnlessReferenced() |
para |
IJavaPeerable.Finalized() |
para |
IJavaPeerable.JniManagedPeerState |
para |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
para |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
para |
IJavaPeerable.SetPeerReference(JniObjectReference) |
para |
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 |
GetJniTypeName(IJavaPeerable) |
para |
AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
para |
InvokeAnyAsync(IExecutorService, ICollection) |
para |
InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
para |