Класс 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 |
Принудительно возвращает заданное значение в качестве результата. |
Методы, объявленные в классе 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
Подробное описание конструкторов
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