Spec-Zone.ru › OpenJDK 27

Класс 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(V value)
Принудительно устанавливает указанное значение в качестве результата.

Методы, объявленные в классе 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(Runnable runnable)
Возвращает новый объект ForkJoinTask, который выполняет метод run заданного объекта Runnable в качестве действия и возвращает результат null при вызове ForkJoinTask.join().
static <T> ForkJoinTask<T> adapt(Runnable runnable, T result)
Возвращает новый объект ForkJoinTask, который выполняет метод run заданного объекта Runnable в качестве действия и возвращает указанный результат при вызове ForkJoinTask.join().
static <T> ForkJoinTask<T> adapt(Callable<? extends T> callable)
Возвращает новый объект ForkJoinTask, который выполняет метод call заданного объекта Callable в качестве действия и возвращает его результат при вызове ForkJoinTask.join(), преобразуя все возникшие проверяемые исключения в RuntimeException.
static ForkJoinTask<?> adaptInterruptible(Runnable runnable)
Возвращает новый объект ForkJoinTask, который выполняет метод run заданного объекта Runnable в качестве действия и возвращает null при вызове ForkJoinTask.join(), преобразуя все возникшие проверяемые исключения в RuntimeException.
static <T> ForkJoinTask<T> adaptInterruptible(Runnable runnable, T result)
Возвращает новый объект ForkJoinTask, который выполняет метод run заданного объекта Runnable в качестве действия и возвращает указанный результат при вызове ForkJoinTask.join(), преобразуя все возникшие проверяемые исключения в RuntimeException.
static <T> ForkJoinTask<T> adaptInterruptible(Callable<? extends T> callable)
Возвращает новый объект ForkJoinTask, который выполняет метод call заданного объекта Callable в качестве действия и возвращает его результат при вызове ForkJoinTask.join(), преобразуя все возникшие проверяемые исключения в RuntimeException.
boolean cancel(boolean mayInterruptIfRunning)
Пытается отменить выполнение этой задачи.
final boolean compareAndSetForkJoinTaskTag(short expect, short update)
Атомарно и условно устанавливает значение метки для этой задачи.
void complete(V value)
Завершает эту задачу и, если она ещё не была прервана или отменена, возвращает указанное значение в качестве результата последующих вызовов join и связанных операций.
void completeExceptionally(Throwable ex)
Завершает эту задачу аварийно и, если она ещё не была прервана или отменена, вызывает указанное исключение при вызове join и связанных операций.
Throwable exceptionNow()
Возвращает исключение, выброшенное задачей, не дожидаясь её завершения.
final ForkJoinTask<V> fork()
Планирует асинхронное выполнение этой задачи в пуле, в котором выполняется текущая задача, если это применимо, или в ForkJoinPool.commonPool(), если текущий поток не ForkJoinTask.inForkJoinPool().
final V get()
При необходимости ожидает завершения вычисления, а затем получает его результат.
final V get(long timeout, TimeUnit unit)
При необходимости ожидает завершения вычисления в течение указанного времени, а затем получает его результат, если он доступен.
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<?>>
Collection<T>
invokeAll(Collection<T> tasks)
Порождает все задачи из указанной коллекции и возвращает управление, когда для каждой задачи выполняется условие isDone либо возникает (непроверяемое) исключение; в последнем случае исключение выбрасывается повторно.
static void invokeAll(ForkJoinTask<?>... tasks)
Порождает указанные задачи и возвращает управление, когда для каждой задачи выполняется условие isDone либо возникает (непроверяемое) исключение; в последнем случае исключение выбрасывается повторно.
static void invokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2)
Порождает указанные задачи и возвращает управление, когда для каждой задачи выполняется условие 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(long timeout, TimeUnit unit)
Пытается дождаться завершения этой задачи и возвращает true, если задача завершилась (возможно, с исключением) до истечения указанного времени ожидания и текущий поток не был прерван.
final boolean quietlyJoinUninterruptibly(long timeout, TimeUnit unit)
Пытается дождаться завершения этой задачи и возвращает true, если задача завершилась (возможно, с исключением) до истечения указанного времени ожидания.
void reinitialize()
Сбрасывает внутреннее состояние учёта этой задачи, разрешая последующий вызов fork.
V resultNow()
Возвращает вычисленный результат, не дожидаясь завершения.
final short setForkJoinTaskTag(short newValue)
Атомарно устанавливает значение метки для этой задачи и возвращает прежнее значение.
Future.State state()
Возвращает состояние вычисления.
boolean tryUnfork()
Пытается снять эту задачу с очереди выполнения.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому.
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(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определённого времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова 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, если известно, что эта задача завершилась нормально

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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