Spec-Zone.ru › OpenJDK 8

Класс RecursiveTask<V>

  • java.lang.Object
    • java.util.concurrent.ForkJoinTask<V>
      • java.util.concurrent.RecursiveTask<V>
Все реализованные интерфейсы:
Serializable, Future<V>

public abstract class RecursiveTask<V>
extends ForkJoinTask<V>

Рекурсивная задача с возвращаемым результатом ForkJoinTask.

В качестве классического примера приведём задачу вычисления чисел Фибоначчи:

class Fibonacci extends RecursiveTask<Integer> {
   final int n;
   Fibonacci(int n) { this.n = n; }
   Integer compute() {
     if (n <= 1)
       return n;
     Fibonacci f1 = new Fibonacci(n - 1);
     f1.fork();
     Fibonacci f2 = new Fibonacci(n - 2);
     return f2.compute() + f1.join();
   }
 }
Однако, помимо того, что это неэффективный способ вычисления чисел Фибоначчи (существует простой быстрый линейный алгоритм, который используется на практике), данная реализация, вероятно, будет работать плохо, так как самые мелкие подзадачи слишком малы для того, чтобы стоило их делить. Вместо этого, как и в почти всех приложениях fork/join, следует выбрать некоторый минимальный размер зерна (например, 10 в данном примере), для которого решение всегда выполняется последовательно, а не разбивается на подзадачи.
С момента:
1.7
См. также:
Сериализованная форма

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

Конструктор и описание
RecursiveTask()

Методы

Модификатор и тип Метод и описание
protected abstract V compute()

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

protected boolean exec()

Реализация соглашений о выполнении для RecursiveTask.

V getRawResult()

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

protected void setRawResult(V value)

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

Методы, унаследованные от класса java.util.concurrent.ForkJoinTask

adapt, adapt, adapt, cancel, compareAndSetForkJoinTaskTag, complete, completeExceptionally, fork, get, get, getException, getForkJoinTaskTag, getPool, getQueuedTaskCount, getSurplusQueuedTaskCount, helpQuiesce, inForkJoinPool, invoke, invokeAll, invokeAll, invokeAll, isCancelled, isCompletedAbnormally, isCompletedNormally, isDone, join, peekNextLocalTask, pollNextLocalTask, pollTask, quietlyComplete, quietlyInvoke, quietlyJoin, reinitialize, setForkJoinTaskTag, tryUnfork

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

RecursiveTask

public RecursiveTask()

Методы

compute

protected abstract V compute()

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

Возвращает:
результат вычисления

getRawResult

public final V getRawResult()

Описание скопировано из класса: ForkJoinTask

Возвращает результат, который вернёт ForkJoinTask.join(), даже если эта задача завершилась аномально, или null , если о завершении этой задачи неизвестно. Данный метод предназначен для отладки, а также для поддержки расширений. Его использование в других контекстах не рекомендуется.

Указано в:
getRawResult в классе ForkJoinTask<V>
Возвращает:
результат или null , если задача не завершена

setRawResult

protected final void setRawResult(V value)

Описание скопировано из класса: ForkJoinTask

Принудительно устанавливает заданное значение в качестве результата. Этот метод предназначен для поддержки расширений и, как правило, не должен вызываться иначе.

Указано в:
setRawResult в классе ForkJoinTask<V>
Параметры:
value - значение

exec

protected final boolean exec()

Реализация соглашений о выполнении для RecursiveTask.

Указано в:
exec в классе ForkJoinTask<V>
Возвращает:
true , если эта задача завершилась нормально

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API