Sprache

RecursiveAction Klasse

Definition

Ein rekursives Ergebnislos ForkJoinTask.

[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
Vererbung
Attribute

Hinweise

Ein rekursives Ergebnislos ForkJoinTask. Diese Klasse legt Konventionen fest, um ergebnislose Aktionen als VoidForkJoinTasks zu parametrisieren. Da null es sich um den einzigen gültigen Wert vom Typ Voidhandelt, geben Methoden wie join immer nach Abschluss zurück null .

<b>Beispielverwendungen.</b> Hier ist eine einfache, aber vollständige ForkJoin-Sortierung, die ein bestimmtes long[] Array sortiert:

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

Sie können dann sortieren anArray , indem Sie es in einem ForkJoinPool erstellen new SortTask(anArray) und aufrufen. Im konkreteren einfachen Beispiel erhöht die folgende Aufgabe jedes Element eines Arrays:

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

Im folgenden Beispiel werden einige Verfeinerungen und Didiome veranschaulicht, die zu einer besseren Leistung führen können: RecursiveActions müssen nicht vollständig rekursiv sein, solange sie den grundlegenden Divid-and-Conquer-Ansatz beibehalten. Hier ist eine Klasse, die die Quadrate jedes Elements eines doppelten Arrays addiert, indem nur die rechten Seiten wiederholter Divisionen nach zwei unterteilt und mit einer Kette von next Bezügen nachverfolgt werden. Es verwendet einen dynamischen Schwellenwert basierend auf der Methode getSurplusQueuedTaskCount, aber ausgleicht potenzielle übermäßige Partitionierung durch direktes Ausführen von Blattaktionen für nicht getolente Vorgänge anstatt weiter unterteilen.

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

In 1.7 hinzugefügt.

Java-Dokumentation für java.util.concurrent.RecursiveAction.

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

Name Beschreibung
RecursiveAction()

Konstruktor für Unterklassen, die aufgerufen werden sollen.

RecursiveAction(IntPtr, JniHandleOwnership)

Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Laufzeit aufgerufen.

Eigenschaften

Name Beschreibung
Class

Gibt die Laufzeitklasse dieses Werts Objectzurück.

(Geerbt von Object)
Exception

Gibt die Ausnahme zurück, die von der Basisberechnung ausgelöst wird, oder wenn CancellationException dies abgebrochen wurde, oder null wenn keine oder wenn die Methode noch nicht abgeschlossen wurde.

(Geerbt von ForkJoinTask)
ForkJoinTaskTag

Gibt das Tag für diesen Vorgang zurück.

(Geerbt von ForkJoinTask)
Handle

Das Handle für die zugrunde liegende Android-Instanz.

(Geerbt von Object)
IsCancelled

Gibt zurück true , ob diese Aufgabe abgebrochen wurde, bevor sie normal abgeschlossen wurde.

(Geerbt von ForkJoinTask)
IsCompletedAbnormally

Gibt zurück true , wenn diese Aufgabe eine Ausnahme ausgelöst oder abgebrochen wurde.

(Geerbt von ForkJoinTask)
IsCompletedNormally

Gibt zurück true , wenn diese Aufgabe abgeschlossen wurde, ohne eine Ausnahme zu auslösen und nicht abgebrochen wurde.

(Geerbt von ForkJoinTask)
IsDone

Gibt zurück true , wenn diese Aufgabe abgeschlossen wurde.

(Geerbt von ForkJoinTask)
JniIdentityHashCode

Ruft den Identitätshashcode ab, der diesem Java Peer von der Interop-Laufzeit zugewiesen ist.

(Geerbt von Object)
JniManagedPeerState

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
JniPeerMembers

Ein rekursives Ergebnislos ForkJoinTask.

PeerReference

Ruft den JNI-Objektverweis für diesen Java Peer ab.

(Geerbt von Object)
RawRawResult

Gibt das Ergebnis zurück, das von Join(), auch wenn diese Aufgabe nicht ungewöhnlich abgeschlossen wurde, oder null wenn diese Aufgabe nicht abgeschlossen wurde.

(Geerbt von ForkJoinTask)
ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

Methoden

Name Beschreibung
Cancel(Boolean)

Versucht, die Ausführung dieser Aufgabe abzubrechen.

(Geerbt von ForkJoinTask)
Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
CompareAndSetForkJoinTaskTag(Int16, Int16)

Atomar bedingt legt den Tagwert für diese Aufgabe fest.

(Geerbt von ForkJoinTask)
Complete(Object)

Führt diese Aufgabe aus, und wenn sie nicht bereits abgebrochen oder abgebrochen wurde, wird der angegebene Wert als Ergebnis nachfolgender Aufrufe join und verwandter Vorgänge zurückgegeben.

(Geerbt von ForkJoinTask)
CompleteExceptionally(Throwable)

Führt diese Aufgabe nicht ungewöhnlich aus, und wenn sie nicht bereits abgebrochen oder abgebrochen wurde, löst sie die gegebene Ausnahme auf join und verwandte Vorgänge aus.

(Geerbt von ForkJoinTask)
Compute()

Die Hauptberechnung, die von dieser Aufgabe ausgeführt wird.

Construct(JniObjectReference, JniObjectReferenceOptions)

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
Dispose()

Veröffentlicht die Ressourcen, die von diesem Java Peer gehalten werden.

(Geerbt von Object)
Dispose(Boolean)

Veröffentlicht die Ressourcen, die von diesem Java Peer gehalten werden.

(Geerbt von Object)
DisposeUnlessReferenced()

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
Equals(Object)

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
Equals(Object)

Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist.

(Geerbt von Object)
ExceptionNow()

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von ForkJoinTask)
Exec()

Implementiert Ausführungskonventionen für RecursiveActions.

Fork()

Ordnet die asynchrone Ausführung dieser Aufgabe im Pool an, in der die aktuelle Aufgabe ausgeführt wird( falls zutreffend) oder wenn ForkJoinPool#commonPool() dies nicht #inForkJoinPoolder Fall ist.

(Geerbt von ForkJoinTask)
Get()

Wartet, falls erforderlich, bis die Berechnung abgeschlossen ist, und ruft dann das Ergebnis ab.

(Geerbt von ForkJoinTask)
Get(Int64, TimeUnit)

Wartet, falls erforderlich, bis die Berechnung abgeschlossen ist, bis die Berechnung abgeschlossen ist, und ruft dann das Ergebnis ab, falls verfügbar.

(Geerbt von ForkJoinTask)
GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
Invoke()

Beginnt mit der Ausführung dieses Vorgangs, wartet bei Bedarf auf seinen Abschluss und gibt sein Ergebnis zurück oder löst eine (nicht überprüfte) RuntimeException oder Error wenn die zugrunde liegende Berechnung dies getan hat.

(Geerbt von ForkJoinTask)
JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind.

(Geerbt von Object)
Join()

Gibt das Ergebnis der Berechnung zurück, wenn #isDone abgeschlossen ist.

(Geerbt von ForkJoinTask)
Notify()

Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten.

(Geerbt von Object)
QuietlyComplete()

Schließt diesen Vorgang normal ab, ohne einen Wert festzulegen.

(Geerbt von ForkJoinTask)
QuietlyInvoke()

Beginnt mit der Durchführung dieser Aufgabe und wartet bei Bedarf auf den Abschluss, ohne dass das Ergebnis zurückgegeben oder die Ausnahme ausgelöst wird.

(Geerbt von ForkJoinTask)
QuietlyJoin()

Verknüpft diese Aufgabe, ohne das Ergebnis zurückzugeben oder die Ausnahme zu auslösen.

(Geerbt von ForkJoinTask)
QuietlyJoin(Int64, TimeUnit)

Versucht, diese Aufgabe zu verbinden, und gibt "true" zurück, wenn sie vor dem angegebenen Timeout (möglicherweise ausnahmsweise) abgeschlossen wurde und der aktuelle Thread nicht unterbrochen wurde.

(Geerbt von ForkJoinTask)
QuietlyJoinUninterruptibly(Int64, TimeUnit)

Versucht, diese Aufgabe zu verbinden, und gibt "true" zurück, wenn sie vor dem angegebenen Timeout abgeschlossen wurde (möglicherweise ausnahmsweise).

(Geerbt von ForkJoinTask)
Reinitialize()

Setzt den internen Buchführungszustand dieser Aufgabe zurück, sodass eine nachfolgende fork.

(Geerbt von ForkJoinTask)
ResultNow()

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von ForkJoinTask)
SetForkJoinTaskTag(Int16)

Atomar legt den Tagwert für diesen Vorgang fest und gibt den alten Wert zurück.

(Geerbt von ForkJoinTask)
SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
SetRawResult(Object)

Erzwingt, dass der angegebene Wert als Ergebnis zurückgegeben wird.

(Geerbt von ForkJoinTask)
State()

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von ForkJoinTask)
ToArray<T>()

Erstellt ein verwaltetes Array aus diesem Java Arraywrapper.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
TryUnfork()

Versucht, diese Aufgabe für die Ausführung zu entplanen.

(Geerbt von ForkJoinTask)
UnregisterFromRuntime()

Hebt die Registrierung dieses Java Peers aus der Interop-Laufzeit auf.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em< oder >em<unterbrochen>/em<.><>

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

Name Beschreibung
IJavaPeerable.Disposed()

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
IJavaPeerable.Finalized()

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Ein rekursives Ergebnislos ForkJoinTask.

(Geerbt von ForkJoinTask)

Erweiterungsmethoden

Name Beschreibung
GetAsync(IFuture, Int64, TimeUnit)

Ein rekursives Ergebnislos ForkJoinTask.

GetAsync(IFuture)

Ein rekursives Ergebnislos ForkJoinTask.

GetJniTypeName(IJavaPeerable)

Ruft den JNI-Namen des Typs der Instanz selfab.

JavaAs<TResult>(IJavaPeerable)

Versuchen Sie, die Eingabe selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Ein rekursives Ergebnislos ForkJoinTask.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Versuchen Sie, die Eingabe selfzu TResult erzwingen, und überprüfen Sie, ob die Koersion auf der Java Seite gültig ist.

Gilt für: