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 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 están ejecutando en un grupo normalmente deben usar los formularios dentro del cálculo enumerados en la tabla a menos que usen tareas asincrónicas de estilo de evento que no se combinan normalmente, 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><>/td td#execute(ForkJoinTask)</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<><> (ForkJoinTasks ForkJoinTask#forkem<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><li>java.util.concurrent.ForkJoinPool.common.parallelism : el nivel de paralelismo, un liger<> entero java.util.concurrent.ForkJoinPool.common.threadFactoryno 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á SecurityManager presente, el grupo común usa un generador que proporciona subprocesos que no Permissions tienen habilitado y no se garantiza que conserve los valores de java.lang.ThreadLocal las variables entre tareas.
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.
Agregado en la versión 1.7.
Java documentación para java.util.concurrent.ForkJoinPool.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.
Constructores
| Nombre | Description |
|---|---|
| ForkJoinPool() |
Crea un con paralelismo |
| ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
para |
| ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
Crea un con paralelismo |
| ForkJoinPool(Int32) |
Crea un |
| ForkJoinPool(IntPtr, JniHandleOwnership) |
Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución. |
Propiedades
| Nombre | Description |
|---|---|
| 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 |
Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad. (Heredado de Object) |
| JniManagedPeerState |
para |
| JniPeerMembers |
para |
| Parallelism |
Devuelve el nivel de paralelismo de destino de este grupo. |
| PeerReference |
Obtiene la referencia de objeto JNI para este Java del mismo nivel. (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
| Nombre | Description |
|---|---|
| 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) |
| Close() |
A menos que sea |
| CommonPool() |
Devuelve la instancia de grupo común. |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
para |
| Dispose() |
Libera los recursos mantenidos por este Java del mismo nivel. (Heredado de Object) |
| Dispose(Boolean) |
Libera los recursos mantenidos por este Java del mismo nivel. (Heredado de Object) |
| DisposeUnlessReferenced() |
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) |
para |
| 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) | |
| ExternalSubmit(ForkJoinTask) |
Envía la tarea especificada como si se enviara desde un cliente que no |
| 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, Int64, TimeUnit) |
para |
| InvokeAll(ICollection) |
para |
| InvokeAny(ICollection, Int64, TimeUnit) |
para |
| InvokeAny(ICollection) |
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) |
| LazySubmit(ForkJoinTask) |
Envía la tarea dada sin garantizar que finalmente se ejecutará en ausencia de subprocesos activos disponibles. |
| 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) |
| SetParallelism(Int32) |
Cambia el paralelismo de destino de este grupo, controlando la creación, el uso y la finalización futuros de los subprocesos de trabajo. |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
para |
| 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, Object) |
para |
| Submit(IRunnable) |
Envía una tarea runnable para su ejecución y devuelve un valor Future que representa esa tarea. (Heredado de AbstractExecutorService) |
| ToArray<T>() |
Crea una matriz administrada a partir de este contenedor de matriz Java. (Heredado de Object) |
| ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
| UnregisterFromRuntime() |
Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad. (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, 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) |
| 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) |
Implementaciones de interfaz explícitas
| Nombre | Description |
|---|---|
| IJavaPeerable.Disposed() |
para |
| IJavaPeerable.Finalized() |
para |
| IJavaPeerable.JniObjectReferenceControlBlock |
para |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
para |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
para |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
para |
| IJavaPeerable.UnregisterFromRuntime() |
para |
Métodos de extensión
| Nombre | Description |
|---|---|
| AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
para |
| GetJniTypeName(IJavaPeerable) |
Obtiene el nombre JNI del tipo de la instancia |
| InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
para |
| InvokeAnyAsync(IExecutorService, ICollection) |
para |
| JavaAs<TResult>(IJavaPeerable) |
Intente coerción |
| JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
| JavaCast<TResult>(IJavaObject) |
para |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Intente coerción |