Класс 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 boolean |
exec() |
Реализует соглашения об выполнении для RecursiveTask. |
Методы, объявленные в классе java.util.concurrent.ForkJoinTask
adapt, adapt, adapt, cancel, compareAndSetForkJoinTaskTag, complete, completeExceptionally, fork, get, get, getException, getForkJoinTaskTag, getPool, getQueuedTaskCount, getRawResult, getSurplusQueuedTaskCount, helpQuiesce, inForkJoinPool, invoke, invokeAll, invokeAll, invokeAll, isCompletedAbnormally, isCompletedNormally, join, peekNextLocalTask, pollNextLocalTask, pollSubmission, pollTask, quietlyComplete, quietlyInvoke, quietlyJoin, reinitialize, setForkJoinTaskTag, setRawResult, tryUnfork
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, объявленные в интерфейсе java.util.concurrent.Future
isCancelled, isDone
Конструкторы
RecursiveTask
public RecursiveTask()
Методы
compute
protected abstract V compute()
Основное вычисление, выполняемое этой задачей.
- Возвращает:
- результат вычисления
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/RecursiveTask.html