Язык

RecursiveAction Класс

Определение

Рекурсивный результат без 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
Наследование
Атрибуты

Комментарии

Рекурсивный результат без ForkJoinTaskрезультата. Этот класс устанавливает соглашения для параметризации результирующих действий как VoidForkJoinTasks. Так как null это единственно допустимое значение типа Void, такие методы, как join всегда возвращаются null после завершения.

<b>Примеры использования.</b> Вот простой, но полный сортировка ForkJoin, которая сортирует заданный 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++];
              }
            }}

Затем можно сортировать anArray , создав new SortTask(anArray) и вызвав его в ForkJoinPool. В качестве более конкретного простого примера следующая задача увеличивает каждый элемент массива:

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

В следующем примере показаны некоторые уточнения и идиомы, которые могут привести к повышению производительности: рекурсивные действия не должны быть полностью рекурсивными, если они поддерживают базовый подход деления и завоевания. Ниже приведен класс, который суммирует квадраты каждого элемента двойного массива, разделив только правые стороны повторяющихся разделений двумя и отслеживая их цепочкой next ссылок. Он использует динамическое пороговое значение на основе метода getSurplusQueuedTaskCount, но уравновещает потенциально избыточное секционирование путем непосредственного выполнения конечных действий по задачам не с последующим разделением.

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

Добавлено в версии 1.7.

Java документации по java.util.concurrent.RecursiveAction.

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Конструкторы

Имя. Описание
RecursiveAction()

Конструктор для вызываемого подкласса.

RecursiveAction(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

Имя. Описание
Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Exception

Возвращает исключение, вызываемое базовым вычислением, или если оно отменено, или CancellationExceptionnull если метод еще не завершен.

(Унаследовано от ForkJoinTask)
ForkJoinTaskTag

Возвращает тег для этой задачи.

(Унаследовано от ForkJoinTask)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
IsCancelled

Возвращает, true если эта задача была отменена до его завершения обычно.

(Унаследовано от ForkJoinTask)
IsCompletedAbnormally

Возвращает, true если эта задача вызвала исключение или была отменена.

(Унаследовано от ForkJoinTask)
IsCompletedNormally

Возвращает, true если эта задача завершена без исключения и не была отменена.

(Унаследовано от ForkJoinTask)
IsDone

Возвращает, true если эта задача завершена.

(Унаследовано от ForkJoinTask)
JniIdentityHashCode

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

(Унаследовано от Object)
JniManagedPeerState

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
JniPeerMembers

Рекурсивный результат без ForkJoinTaskрезультата.

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от Object)
RawRawResult

Возвращает результат, который будет возвращен Join(), даже если эта задача завершена ненормально или null если эта задача не была завершена.

(Унаследовано от ForkJoinTask)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Имя. Описание
Cancel(Boolean)

Пытается отменить выполнение этой задачи.

(Унаследовано от ForkJoinTask)
Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
CompareAndSetForkJoinTaskTag(Int16, Int16)

Атомарно задает значение тега для этой задачи.

(Унаследовано от ForkJoinTask)
Complete(Object)

Завершает эту задачу, а если она еще не прервана или отменена, возвращает заданное значение в результате последующих вызовов join и связанных операций.

(Унаследовано от ForkJoinTask)
CompleteExceptionally(Throwable)

Завершает эту задачу ненормально, а если она еще не прервана или отменена, вызывает исключение при join выполнении и связанных операциях.

(Унаследовано от ForkJoinTask)
Compute()

Основные вычисления, выполняемые этой задачей.

Construct(JniObjectReference, JniObjectReferenceOptions)

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
Dispose()

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
Dispose(Boolean)

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
DisposeUnlessReferenced()

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
Equals(Object)

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
ExceptionNow()

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от ForkJoinTask)
Exec()

Реализует соглашения о выполнении для RecursiveActions.

Fork()

Упорядочивает асинхронное выполнение этой задачи в пуле, в котором выполняется текущая задача, если применимо, или используется, ForkJoinPool#commonPool() если нет #inForkJoinPool.

(Унаследовано от ForkJoinTask)
Get()

Ожидает завершения вычисления, а затем извлекает результат.

(Унаследовано от ForkJoinTask)
Get(Int64, TimeUnit)

Ожидает, если это необходимо, по крайней мере заданное время для завершения вычисления, а затем извлекает его результат, если он доступен.

(Унаследовано от ForkJoinTask)
GetHashCode()

Возвращает хэш-значение кода для объекта.

(Унаследовано от Object)
Invoke()

Начинает выполнение этой задачи, ожидает завершения при необходимости и возвращает его результат или вызывает (снято) RuntimeException или Error если базовое вычисление сделал это.

(Унаследовано от ForkJoinTask)
JavaFinalize()
Устаревшие.

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
Join()

Возвращает результат вычисления при выполнении #isDone.

(Унаследовано от ForkJoinTask)
Notify()

Просыпается один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
QuietlyComplete()

Обычно выполняет эту задачу без задания значения.

(Унаследовано от ForkJoinTask)
QuietlyInvoke()

Начинает выполнение этой задачи и ожидает завершения при необходимости, не возвращая результат или бросая исключение.

(Унаследовано от ForkJoinTask)
QuietlyJoin()

Присоединяет эту задачу, не возвращая результат или не вызывая исключение.

(Унаследовано от ForkJoinTask)
QuietlyJoin(Int64, TimeUnit)

Пытается присоединиться к этой задаче, возвращая значение true, если оно завершено (возможно, исключительно) до заданного времени ожидания и текущего потока не было прервано.

(Унаследовано от ForkJoinTask)
QuietlyJoinUninterruptibly(Int64, TimeUnit)

Пытается присоединиться к этой задаче, возвращая значение true, если оно завершено (возможно, исключительно) до заданного времени ожидания.

(Унаследовано от ForkJoinTask)
Reinitialize()

Сбрасывает состояние внутренней бухгалтерии этой задачи, позволяя последующему fork.

(Унаследовано от ForkJoinTask)
ResultNow()

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от ForkJoinTask)
SetForkJoinTaskTag(Int16)

Атомарно задает значение тега для этой задачи и возвращает старое значение.

(Унаследовано от ForkJoinTask)
SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
SetRawResult(Object)

Принудительно возвращает заданное значение в результате.

(Унаследовано от ForkJoinTask)
State()

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от ForkJoinTask)
ToArray<T>()

Создает управляемый массив из этого Java оболочки массива.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
TryUnfork()

Пытается отменить эту задачу для выполнения.

(Унаследовано от ForkJoinTask)
UnregisterFromRuntime()

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

(Унаследовано от Object)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.>

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

Имя. Описание
IJavaPeerable.Disposed()

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
IJavaPeerable.Finalized()

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Рекурсивный результат без ForkJoinTaskрезультата.

(Унаследовано от ForkJoinTask)

Методы расширения

Имя. Описание
GetAsync(IFuture, Int64, TimeUnit)

Рекурсивный результат без ForkJoinTaskрезультата.

GetAsync(IFuture)

Рекурсивный результат без ForkJoinTaskрезультата.

GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Рекурсивный результат без ForkJoinTaskрезультата.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к