Класс RecursiveTask<V>
java.lang.Object
java.util.concurrent.ForkJoinTask<V>
java.util.concurrent.RecursiveTask<V>
- Параметры типа:
V- тип результата задачи
- Все реализуемые интерфейсы:
Serializable, Future<V>
public abstract class RecursiveTask<V> extends ForkJoinTask<V>
Рекурсивная задача с результатом
ForkJoinTask. Например, ниже приведена программа на основе задач для вычисления факториалов:
import java.util.concurrent.RecursiveTask;
import java.math.BigInteger;
public class Factorial {
static class FactorialTask extends RecursiveTask<BigInteger> {
private final int from, to;
FactorialTask(int from, int to) { this.from = from; this.to = to; }
protected BigInteger compute() {
int range = to - from;
if (range == 0) { // base case
return BigInteger.valueOf(from);
} else if (range == 1) { // too small to parallelize
return BigInteger.valueOf(from).multiply(BigInteger.valueOf(to));
} else { // split in half
int mid = from + range / 2;
FactorialTask leftTask = new FactorialTask(from, mid);
leftTask.fork(); // perform about half the work locally
return new FactorialTask(mid + 1, to).compute()
.multiply(leftTask.join());
}
}
}
static BigInteger factorial(int n) { // uses ForkJoinPool.commonPool()
return (n <= 1) ? BigInteger.ONE : new FactorialTask(1, n).invoke();
}
public static void main(String[] args) {
System.out.println(factorial(Integer.parseInt(args[0])));
}
}
- Начиная с версии:
- 1.7
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе Future
Future.State | Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static enum |
Future.State |
Представляет состояние вычисления. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
RecursiveTask() |
Конструктор, который вызывается подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected abstract V |
compute() |
Основное вычисление, выполняемое этой задачей. |
protected final boolean |
exec() |
Реализует соглашения о выполнении для RecursiveTask. |
final V |
getRawResult() |
Возвращает результат, который был бы возвращён методом ForkJoinTask.join(), даже если эта задача завершилась аварийно, или null, если неизвестно, завершилась ли эта задача. |
protected final void |
setRawResult |
Принудительно устанавливает указанное значение в качестве результата. |
Методы, объявленные в классе ForkJoinTask
adapt, adapt, adapt, adaptInterruptible, adaptInterruptible, adaptInterruptible, cancel, compareAndSetForkJoinTaskTag, complete, completeExceptionally, exceptionNow, 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, quietlyJoin, quietlyJoinUninterruptibly, reinitialize, resultNow, setForkJoinTaskTag, state, tryUnfork | Модификатор и тип | Метод | Описание |
|---|---|---|
static ForkJoinTask |
adapt |
Возвращает новый объект ForkJoinTask, который выполняет метод run заданного объекта Runnable в качестве действия и возвращает результат null при вызове ForkJoinTask.join(). |
static <T> ForkJoinTask |
adapt |
Возвращает новый объект ForkJoinTask, который выполняет метод run заданного объекта Runnable в качестве действия и возвращает указанный результат при вызове ForkJoinTask.join(). |
static <T> ForkJoinTask |
adapt |
Возвращает новый объект ForkJoinTask, который выполняет метод call заданного объекта Callable в качестве действия и возвращает его результат при вызове ForkJoinTask.join(), преобразуя все возникшие проверяемые исключения в RuntimeException. |
static ForkJoinTask |
adaptInterruptible |
Возвращает новый объект ForkJoinTask, который выполняет метод
run заданного объекта Runnable в качестве действия и возвращает null при вызове ForkJoinTask.join(), преобразуя все возникшие проверяемые исключения в RuntimeException. |
static <T> ForkJoinTask |
adaptInterruptible |
Возвращает новый объект ForkJoinTask, который выполняет метод run заданного объекта Runnable в качестве действия и возвращает указанный результат при вызове ForkJoinTask.join(), преобразуя все возникшие проверяемые исключения в RuntimeException. |
static <T> ForkJoinTask |
adaptInterruptible |
Возвращает новый объект ForkJoinTask, который выполняет метод call заданного объекта Callable в качестве действия и возвращает его результат при вызове ForkJoinTask.join(), преобразуя все возникшие проверяемые исключения в RuntimeException. |
boolean |
cancel |
Пытается отменить выполнение этой задачи. |
final boolean |
compareAndSetForkJoinTaskTag |
Атомарно и условно устанавливает значение метки для этой задачи. |
void |
complete |
Завершает эту задачу и, если она ещё не была прервана или отменена, возвращает указанное значение в качестве результата последующих вызовов join и связанных операций. |
void |
completeExceptionally |
Завершает эту задачу аварийно и, если она ещё не была прервана или отменена, вызывает указанное исключение при вызове join и связанных операций. |
Throwable |
exceptionNow() |
Возвращает исключение, выброшенное задачей, не дожидаясь её завершения. |
final ForkJoinTask |
fork() |
Планирует асинхронное выполнение этой задачи в пуле, в котором выполняется текущая задача, если это применимо, или в ForkJoinPool.commonPool(), если текущий поток не ForkJoinTask.inForkJoinPool(). |
final V |
get() |
При необходимости ожидает завершения вычисления, а затем получает его результат. |
final V |
get |
При необходимости ожидает завершения вычисления в течение указанного времени, а затем получает его результат, если он доступен. |
final Throwable |
getException() |
Возвращает исключение, выброшенное базовым вычислением, или CancellationException, если задача отменена, или null, если исключения нет либо метод ещё не завершился. |
final short |
getForkJoinTaskTag() |
Возвращает метку этой задачи. |
static ForkJoinPool |
getPool() |
Возвращает пул, в котором работает текущий поток, или null, если текущий поток выполняется вне какого-либо ForkJoinPool. |
static int |
getQueuedTaskCount() |
Возвращает оценочное количество задач, порождённых текущим рабочим потоком, но ещё не выполненных. |
static int |
getSurplusQueuedTaskCount() |
Возвращает оценку того, насколько количество других задач в локальной очереди текущего рабочего потока превышает количество других рабочих потоков, которые могут их перехватить, или ноль, если этот поток не работает в ForkJoinPool. |
static void |
helpQuiesce() |
При необходимости выполняет задачи, пока пул, в котором выполняется текущая задача, не перейдёт в состояние покоя. |
static boolean |
inForkJoinPool() |
Возвращает true, если текущий поток — это ForkJoinWorkerThread, выполняющий вычисление в ForkJoinPool. |
final V |
invoke() |
Начинает выполнение этой задачи, при необходимости ожидает её завершения и возвращает результат либо выбрасывает (непроверяемое) исключение RuntimeException или Error, если его выбросило базовое вычисление. |
static <T extends ForkJoinTask<?>> |
invokeAll |
Порождает все задачи из указанной коллекции и возвращает управление, когда для каждой задачи выполняется условие isDone либо возникает (непроверяемое) исключение; в последнем случае исключение выбрасывается повторно. |
static void |
invokeAll |
Порождает указанные задачи и возвращает управление, когда для каждой задачи выполняется условие isDone либо возникает (непроверяемое) исключение; в последнем случае исключение выбрасывается повторно. |
static void |
invokeAll |
Порождает указанные задачи и возвращает управление, когда для каждой задачи выполняется условие isDone либо возникает (непроверяемое) исключение; в последнем случае исключение выбрасывается повторно. |
final boolean |
isCancelled() |
Возвращает true, если эта задача была отменена до нормального завершения. |
final boolean |
isCompletedAbnormally() |
Возвращает true, если эта задача выбросила исключение или была отменена. |
final boolean |
isCompletedNormally() |
Возвращает true, если эта задача завершилась без выброса исключения и не была отменена. |
final boolean |
isDone() |
Возвращает true, если эта задача завершилась. |
final V |
join() |
Возвращает результат вычисления, когда оно завершено. |
protected static ForkJoinTask |
peekNextLocalTask() |
Возвращает, но не снимает с очереди и не выполняет задачу, поставленную в очередь текущим потоком, но ещё не выполненную, если такая задача доступна немедленно. |
protected static ForkJoinTask |
pollNextLocalTask() |
Снимает с очереди и возвращает, не выполняя, следующую задачу, поставленную в очередь текущим потоком, но ещё не выполненную, если текущий поток работает в ForkJoinPool. |
protected static ForkJoinTask |
pollSubmission() |
Если текущий поток работает в ForkJoinPool, снимает с очереди и возвращает, не выполняя, задачу, отправленную в пул извне, если такая задача доступна. |
protected static ForkJoinTask |
pollTask() |
Если текущий поток работает в ForkJoinPool, снимает с очереди и возвращает, не выполняя, следующую задачу, поставленную в очередь текущим потоком, но ещё не выполненную, если такая задача доступна; в противном случае возвращает задачу, порождённую другим потоком, если она доступна. |
final void |
quietlyComplete() |
Завершает эту задачу нормально, не устанавливая значение. |
final void |
quietlyInvoke() |
Начинает выполнение этой задачи и при необходимости ожидает её завершения, не возвращая результат и не выбрасывая исключение. |
final void |
quietlyJoin() |
Ожидает завершения этой задачи, не возвращая её результат и не выбрасывая исключение. |
final boolean |
quietlyJoin |
Пытается дождаться завершения этой задачи и возвращает true, если задача завершилась (возможно, с исключением) до истечения указанного времени ожидания и текущий поток не был прерван. |
final boolean |
quietlyJoinUninterruptibly |
Пытается дождаться завершения этой задачи и возвращает true, если задача завершилась (возможно, с исключением) до истечения указанного времени ожидания. |
void |
reinitialize() |
Сбрасывает внутреннее состояние учёта этой задачи, разрешая последующий вызов fork. |
V |
resultNow() |
Возвращает вычисленный результат, не дожидаясь завершения. |
final short |
setForkJoinTaskTag |
Атомарно устанавливает значение метки для этой задачи и возвращает прежнее значение. |
Future.State |
state() |
Возвращает состояние вычисления. |
boolean |
tryUnfork() |
Пытается снять эту задачу с очереди выполнения. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определённого времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определённого времени. |
Подробное описание конструкторов
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, 2025, 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.