Spec-Zone.ru › OpenJDK 17

Класс 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; }
   protected 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 final boolean exec()
Реализует соглашения о выполнении для RecursiveTask.
final V getRawResult()
Возвращает результат, который бы вернул ForkJoinTask.join(), даже если эта задача завершилась аномально, или null если эта задача не известна как завершённая.
protected final 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, pollSubmission, 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, 2021, 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.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/RecursiveTask.html

Spec-Zone.ru

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