Langage

RecursiveAction Classe

Définition

Un résultat ForkJoinTaskrécursif .

[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
Héritage
Attributs

Remarques

Un résultat ForkJoinTaskrécursif . Cette classe établit des conventions pour paramétrer les actions sans résultat en tant que VoidForkJoinTasks. Étant donné qu’il null s’agit de la seule valeur valide de type Void, les méthodes telles que join toujours retourner null à la fin.

<b>Exemples d’utilisations.</b> Voici un tri ForkJoin simple mais complet qui trie un tableau donné 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++];
              }
            }}

Vous pouvez ensuite trier anArray en créant new SortTask(anArray) et en l’appelant dans un ForkJoinPool. Comme exemple plus concret, la tâche suivante incrémente chaque élément d’un tableau :

{@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));
                }
              }
            }}

L’exemple suivant illustre quelques affinements et idiomes qui peuvent entraîner de meilleures performances : Les récursiveActions n’ont pas besoin d’être entièrement récursives, tant qu’elles maintiennent l’approche de base de division et de conquête. Voici une classe qui additionne les carrés de chaque élément d’un tableau double, en subdivisant uniquement les côtés droit des divisions répétées par deux, et en les faisant suivre avec une chaîne de next références. Il utilise un seuil dynamique basé sur la méthode getSurplusQueuedTaskCount, mais contrebalance le partitionnement excessif potentiel en effectuant directement des actions feuille sur des tâches non exécutées au lieu de subdivider davantage.

{@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;
              }
            }}

Ajouté dans la version 1.7.

Documentation Java pour java.util.concurrent.RecursiveAction.

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

Constructeurs

Nom Description
RecursiveAction()

Constructeur pour les sous-classes à appeler.

RecursiveAction(IntPtr, JniHandleOwnership)

Constructeur utilisé lors de la création de représentations managées d’objets JNI ; appelée par le runtime.

Propriétés

Nom Description
Class

Retourne la classe runtime de ce Object.

(Hérité de Object)
Exception

Retourne l’exception levée par le calcul de base, ou si CancellationException elle est annulée, ou null si aucune ou si la méthode n’a pas encore été terminée.

(Hérité de ForkJoinTask)
ForkJoinTaskTag

Retourne la balise de cette tâche.

(Hérité de ForkJoinTask)
Handle

Handle de l’instance Android sous-jacente.

(Hérité de Object)
IsCancelled

Retourne true si cette tâche a été annulée avant qu’elle ne soit terminée normalement.

(Hérité de ForkJoinTask)
IsCompletedAbnormally

Retourne true si cette tâche a levé une exception ou a été annulée.

(Hérité de ForkJoinTask)
IsCompletedNormally

Retourne true si cette tâche s’est terminée sans lever d’exception et n’a pas été annulée.

(Hérité de ForkJoinTask)
IsDone

Retourne true si cette tâche s’est terminée.

(Hérité de ForkJoinTask)
JniIdentityHashCode

Obtient le code de hachage d’identité affecté à cet homologue Java par le runtime d’interopérabilité.

(Hérité de Object)
JniManagedPeerState

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
JniPeerMembers

Un résultat ForkJoinTaskrécursif .

PeerReference

Obtient la référence d’objet JNI pour cet homologue Java.

(Hérité de Object)
RawRawResult

Retourne le résultat qui serait retourné par Join(), même si cette tâche s’est terminée anormalement ou null si cette tâche n’est pas connue pour avoir été terminée.

(Hérité de ForkJoinTask)
ThresholdClass

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

ThresholdType

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

Méthodes

Nom Description
Cancel(Boolean)

Tente d’annuler l’exécution de cette tâche.

(Hérité de ForkJoinTask)
Clone()

Crée et retourne une copie de cet objet.

(Hérité de Object)
CompareAndSetForkJoinTaskTag(Int16, Int16)

Définit de manière conditionnelle la valeur de balise de cette tâche de manière atomique.

(Hérité de ForkJoinTask)
Complete(Object)

Termine cette tâche et, si elle n’est pas déjà abandonnée ou annulée, retourne la valeur donnée en raison des appels suivants d’opérations join et d’opérations connexes.

(Hérité de ForkJoinTask)
CompleteExceptionally(Throwable)

Termine cette tâche anormalement et, si elle n’est pas déjà abandonnée ou annulée, elle lève l’exception donnée sur join les opérations associées et les opérations associées.

(Hérité de ForkJoinTask)
Compute()

Calcul principal effectué par cette tâche.

Construct(JniObjectReference, JniObjectReferenceOptions)

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
Dispose()

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
Dispose(Boolean)

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
DisposeUnlessReferenced()

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
Equals(Object)

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
Equals(Object)

Indique si un autre objet est « égal à » celui-ci.

(Hérité de Object)
ExceptionNow()

Un résultat ForkJoinTaskrécursif .

(Hérité de ForkJoinTask)
Exec()

Implémente des conventions d’exécution pour RecursiveActions.

Fork()

Organise l’exécution asynchrone de cette tâche dans le pool dans lequel la tâche actuelle s’exécute, le cas échéant, ou en utilisant le ForkJoinPool#commonPool() cas échéant #inForkJoinPool.

(Hérité de ForkJoinTask)
Get()

Attend si nécessaire que le calcul se termine, puis récupère son résultat.

(Hérité de ForkJoinTask)
Get(Int64, TimeUnit)

Attend si nécessaire pour que le calcul soit terminé au maximum, puis récupère son résultat, le cas échéant.

(Hérité de ForkJoinTask)
GetHashCode()

Retourne une valeur de code de hachage pour l’objet.

(Hérité de Object)
Invoke()

Commence à effectuer cette tâche, attend sa fin si nécessaire et retourne son résultat, ou lève une (décochée) RuntimeException ou Error si le calcul sous-jacent l’a fait.

(Hérité de ForkJoinTask)
JavaFinalize()

Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet.

(Hérité de Object)
Join()

Retourne le résultat du calcul lorsqu’il #isDone est terminé.

(Hérité de ForkJoinTask)
Notify()

Réveille un thread unique qui attend le moniteur de cet objet.

(Hérité de Object)
NotifyAll()

Réveille tous les threads qui attendent le moniteur de cet objet.

(Hérité de Object)
QuietlyComplete()

Termine cette tâche normalement sans définir de valeur.

(Hérité de ForkJoinTask)
QuietlyInvoke()

Commence à effectuer cette tâche et attend sa fin si nécessaire, sans retourner son résultat ou lever son exception.

(Hérité de ForkJoinTask)
QuietlyJoin()

Joint cette tâche, sans retourner son résultat ou lever son exception.

(Hérité de ForkJoinTask)
QuietlyJoin(Int64, TimeUnit)

Tente de joindre cette tâche, en retournant true si elle s’est terminée (éventuellement exceptionnellement) avant le délai d’expiration donné et que le thread actuel n’a pas été interrompu.

(Hérité de ForkJoinTask)
QuietlyJoinUninterruptibly(Int64, TimeUnit)

Tente de joindre cette tâche, en retournant true si elle s’est terminée (éventuellement exceptionnellement) avant le délai d’expiration donné.

(Hérité de ForkJoinTask)
Reinitialize()

Réinitialise l’état interne de la comptabilité de cette tâche, ce qui permet d’obtenir un résultat ultérieur fork.

(Hérité de ForkJoinTask)
ResultNow()

Un résultat ForkJoinTaskrécursif .

(Hérité de ForkJoinTask)
SetForkJoinTaskTag(Int16)

Définit atomiquement la valeur de balise pour cette tâche et retourne l’ancienne valeur.

(Hérité de ForkJoinTask)
SetHandle(IntPtr, JniHandleOwnership)

Définit la propriété Handle.

(Hérité de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
SetRawResult(Object)

Force le retour de la valeur donnée en conséquence.

(Hérité de ForkJoinTask)
State()

Un résultat ForkJoinTaskrécursif .

(Hérité de ForkJoinTask)
ToArray<T>()

Crée un tableau managé à partir de ce wrapper de tableau Java.

(Hérité de Object)
ToString()

Retourne une représentation sous forme de chaîne de l’objet.

(Hérité de Object)
TryUnfork()

Tente de déplanifier cette tâche pour l’exécution.

(Hérité de ForkJoinTask)
UnregisterFromRuntime()

Annule l’inscription de cet homologue Java à partir du runtime d’interopérabilité.

(Hérité de Object)
Wait()

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<>

(Hérité de Object)
Wait(Int64, Int32)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)
Wait(Int64)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
IJavaPeerable.Disposed()

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
IJavaPeerable.Finalized()

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Un résultat ForkJoinTaskrécursif .

(Hérité de JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Un résultat ForkJoinTaskrécursif .

(Hérité de ForkJoinTask)

Méthodes d’extension

Nom Description
GetAsync(IFuture, Int64, TimeUnit)

Un résultat ForkJoinTaskrécursif .

GetAsync(IFuture)

Un résultat ForkJoinTaskrécursif .

GetJniTypeName(IJavaPeerable)

Obtient le nom JNI du type de l’instance self.

JavaAs<TResult>(IJavaPeerable)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

JavaCast<TResult>(IJavaObject)

Effectue une conversion de type vérifiée par le runtime Android.

JavaCast<TResult>(IJavaObject)

Un résultat ForkJoinTaskrécursif .

TryJavaCast<TResult>(IJavaPeerable, TResult)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

S’applique à