RecursiveAction 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í.
Sin resultado ForkJoinTaskrecursivo.
[Android.Runtime.Register("java/util/concurrent/RecursiveAction", DoNotGenerateAcw=true)]
public abstract class RecursiveAction : Java.Util.Concurrent.ForkJoinTask
[<Android.Runtime.Register("java/util/concurrent/RecursiveAction", DoNotGenerateAcw=true)>]
type RecursiveAction = class
inherit ForkJoinTask
- Herencia
- Atributos
Comentarios
Sin resultado ForkJoinTaskrecursivo. Esta clase establece convenciones para parametrizar acciones sin resultados como VoidForkJoinTasks. Dado que null es el único valor válido de tipo Void, los métodos como join siempre se devuelven null tras la finalización.
<b>Usos de ejemplo.</b> Esta es una ordenación simple pero completa de ForkJoin que ordena una matriz determinada long[] :
{@code
static class SortTask extends RecursiveAction {
final long[] array; final int lo, hi;
SortTask(long[] array, int lo, int hi) {
this.array = array; this.lo = lo; this.hi = hi;
}
SortTask(long[] array) { this(array, 0, array.length); }
protected void compute() {
if (hi - lo < THRESHOLD)
sortSequentially(lo, hi);
else {
int mid = (lo + hi) >>> 1;
invokeAll(new SortTask(array, lo, mid),
new SortTask(array, mid, hi));
merge(lo, mid, hi);
}
}
// implementation details follow:
static final int THRESHOLD = 1000;
void sortSequentially(int lo, int hi) {
Arrays.sort(array, lo, hi);
}
void merge(int lo, int mid, int hi) {
long[] buf = Arrays.copyOfRange(array, lo, mid);
for (int i = 0, j = lo, k = mid; i < buf.length; j++)
array[j] = (k == hi || buf[i] < array[k]) ?
buf[i++] : array[k++];
}
}}
Después, podría ordenarlo anArray creando new SortTask(anArray) e invocando en un ForkJoinPool. Como ejemplo más concreto, la siguiente tarea incrementa cada elemento de una matriz:
{@code
class IncrementTask extends RecursiveAction {
final long[] array; final int lo, hi;
IncrementTask(long[] array, int lo, int hi) {
this.array = array; this.lo = lo; this.hi = hi;
}
protected void compute() {
if (hi - lo < THRESHOLD) {
for (int i = lo; i < hi; ++i)
array[i]++;
}
else {
int mid = (lo + hi) >>> 1;
invokeAll(new IncrementTask(array, lo, mid),
new IncrementTask(array, mid, hi));
}
}
}}
En el ejemplo siguiente se muestran algunos refinamientos y expresiones que pueden dar lugar a un mejor rendimiento: RecursiveActions no necesita ser totalmente recursivo, siempre y cuando mantengan el enfoque básico de división y conquista. Esta es una clase que suma los cuadrados de cada elemento de una matriz doble, al subdividir solo los lados derecho de las divisiones repetidas entre dos y realizar un seguimiento de ellos con una cadena de next referencias. Usa un umbral dinámico basado en el método getSurplusQueuedTaskCount, pero contrae el exceso de particiones potencial mediante la realización directa de acciones hoja en tareas no robadas en lugar de subdividir aún más.
{@code
double sumOfSquares(ForkJoinPool pool, double[] array) {
int n = array.length;
Applyer a = new Applyer(array, 0, n, null);
pool.invoke(a);
return a.result;
}
class Applyer extends RecursiveAction {
final double[] array;
final int lo, hi;
double result;
Applyer next; // keeps track of right-hand-side tasks
Applyer(double[] array, int lo, int hi, Applyer next) {
this.array = array; this.lo = lo; this.hi = hi;
this.next = next;
}
double atLeaf(int l, int h) {
double sum = 0;
for (int i = l; i < h; ++i) // perform leftmost base step
sum += array[i] * array[i];
return sum;
}
protected void compute() {
int l = lo;
int h = hi;
Applyer right = null;
while (h - l > 1 && getSurplusQueuedTaskCount() <= 3) {
int mid = (l + h) >>> 1;
right = new Applyer(array, mid, h, right);
right.fork();
h = mid;
}
double sum = atLeaf(l, h);
while (right != null) {
if (right.tryUnfork()) // directly calculate if not stolen
sum += right.atLeaf(right.lo, right.hi);
else {
right.join();
sum += right.result;
}
right = right.next;
}
result = sum;
}
}}
Agregado en la versión 1.7.
Documentación de Java para java.util.concurrent.RecursiveAction.
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 |
|---|---|
| RecursiveAction() |
Constructor para que las subclases llamen. |
| RecursiveAction(IntPtr, JniHandleOwnership) |
Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución. |
Propiedades
| Nombre | Description |
|---|---|
| Class |
Devuelve la clase en tiempo de ejecución de este |
| Exception |
Devuelve la excepción producida por el cálculo base, o si |
| ForkJoinTaskTag |
Devuelve la etiqueta de esta tarea. (Heredado de ForkJoinTask) |
| Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
| IsCancelled |
Devuelve |
| IsCompletedAbnormally |
Devuelve |
| IsCompletedNormally |
Devuelve |
| IsDone |
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 |
Sin resultado |
| JniPeerMembers |
Sin resultado |
| PeerReference |
Obtiene la referencia de objeto JNI para este Java del mismo nivel. (Heredado de Object) |
| RawRawResult |
Devuelve el resultado devuelto por Join(), incluso si esta tarea se completó de forma anómala o |
| 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. |
Métodos
| Nombre | Description |
|---|---|
| Cancel(Boolean) |
Intenta cancelar la ejecución de esta tarea. (Heredado de ForkJoinTask) |
| Clone() |
Crea y devuelve una copia de este objeto. (Heredado de Object) |
| CompareAndSetForkJoinTaskTag(Int16, Int16) |
Establece condicionalmente el valor de etiqueta de esta tarea de forma atómica. (Heredado de ForkJoinTask) |
| Complete(Object) |
Completa esta tarea y, si aún no se ha anulado o cancelado, devuelve el valor especificado como resultado de las invocaciones posteriores de |
| CompleteExceptionally(Throwable) |
Completa esta tarea de forma anómala y, si aún no se ha anulado o cancelado, hace que inicie la excepción dada en |
| Compute() |
El cálculo principal realizado por esta tarea. |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Sin resultado |
| 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() |
Sin resultado |
| Equals(Object) |
Sin resultado |
| Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
| ExceptionNow() |
Sin resultado |
| Exec() |
Implementa las convenciones de ejecución para RecursiveActions. |
| Fork() |
Organiza para ejecutar de forma asincrónica esta tarea en el grupo en el que se ejecuta la tarea actual, si procede, o usando si |
| Get() |
Espera si es necesario para que se complete el cálculo y, a continuación, recupera su resultado. (Heredado de ForkJoinTask) |
| Get(Int64, TimeUnit) |
Espera si es necesario para que el cálculo se complete como máximo y, a continuación, recupera su resultado, si está disponible. (Heredado de ForkJoinTask) |
| GetHashCode() |
Devuelve un valor de código hash para el objeto . (Heredado de Object) |
| Invoke() |
Comienza a realizar esta tarea, espera su finalización si es necesario y devuelve su resultado, o inicia una (desactivada) |
| 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) |
| Join() |
Devuelve el resultado del cálculo cuando #isDone se realiza. (Heredado de ForkJoinTask) |
| 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) |
| QuietlyComplete() |
Completa esta tarea normalmente sin establecer un valor. (Heredado de ForkJoinTask) |
| QuietlyInvoke() |
Comienza a realizar esta tarea y espera su finalización si es necesario, sin devolver su resultado ni producir su excepción. (Heredado de ForkJoinTask) |
| QuietlyJoin() |
Combina esta tarea, sin devolver su resultado ni producir su excepción. (Heredado de ForkJoinTask) |
| QuietlyJoin(Int64, TimeUnit) |
Intenta unir esta tarea, devolviendo true si se completó (posiblemente excepcionalmente) antes del tiempo de espera especificado y el subproceso actual no se ha interrumpido. (Heredado de ForkJoinTask) |
| QuietlyJoinUninterruptibly(Int64, TimeUnit) |
Intenta unir esta tarea, devolviendo true si se completó (posiblemente excepcionalmente) antes del tiempo de espera especificado. (Heredado de ForkJoinTask) |
| Reinitialize() |
Restablece el estado de contabilidad interno de esta tarea, lo que permite un posterior |
| ResultNow() |
Sin resultado |
| SetForkJoinTaskTag(Int16) |
Establece de forma atómica el valor de etiqueta de esta tarea y devuelve el valor anterior. (Heredado de ForkJoinTask) |
| SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Sin resultado |
| SetRawResult(Object) |
Fuerza que el valor especificado se devuelva como resultado. (Heredado de ForkJoinTask) |
| State() |
Sin resultado |
| 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) |
| TryUnfork() |
Intenta anular la programación de esta tarea para su ejecución. (Heredado de ForkJoinTask) |
| 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 despierte, 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() |
Sin resultado |
| IJavaPeerable.Finalized() |
Sin resultado |
| IJavaPeerable.JniObjectReferenceControlBlock |
Sin resultado |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Sin resultado |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Sin resultado |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Sin resultado |
| IJavaPeerable.UnregisterFromRuntime() |
Sin resultado |
Métodos de extensión
| Nombre | Description |
|---|---|
| GetAsync(IFuture, Int64, TimeUnit) |
Sin resultado |
| GetAsync(IFuture) |
Sin resultado |
| GetJniTypeName(IJavaPeerable) |
Obtiene el nombre JNI del tipo de la instancia |
| 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) |
Sin resultado |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Intente coerción |