Spec-Zone.ru › OpenJDK 21

Класс ForkJoinTask<V>

java.lang.Object
java.util.concurrent.ForkJoinTask<V>
Параметры типа:
V - тип результата задачи
Все реализуемые интерфейсы:
Serializable, Future<V>
Прямые известные подклассы:
CountedCompleter, RecursiveAction, RecursiveTask
public abstract class ForkJoinTask<V> extends Object implements Future<V>, Serializable
Абстрактный базовый класс для задач, выполняемых в ForkJoinPool. Задача ForkJoinTask — это потокоподобный объект, намного легче обычного потока. Большое количество задач и подзадач может выполняться небольшим числом реальных потоков в ForkJoinPool, ценой некоторых ограничений использования.

«Главная» ForkJoinTask начинает выполнение, когда она явно отправляется в ForkJoinPool или, если она еще не участвует в вычислении ForkJoin, запускается в ForkJoinPool.commonPool() с помощью fork(), invoke() или родственных методов. После запуска она обычно запускает другие подзадачи. Как указано в имени этого класса, многие программы, использующие ForkJoinTask применяют только методы fork() и join(), или их производные, такие как invokeAll. Однако этот класс также предоставляет ряд других методов, которые могут использоваться в продвинутых случаях, а также механизмы расширения, которые позволяют поддерживать новые формы обработки fork/join.

Задача ForkJoinTask — это лёгкая форма Future. Эффективность задач ForkJoinTask обусловлена набором ограничений (которые только частично статически проверяются), отражающих их основное использование как задач вычисления чистых функций или работы с полностью изолированными объектами. Основные механизмы координации — fork(), который организует асинхронное выполнение, и join(), который не продолжается, пока результат задачи не будет вычислен. Вычисления, в идеале, должны избегать методов или блоков synchronized и минимизировать другую блокирующую синхронизацию помимо объединения других задач или использования синхронизаторов, таких как Phasers, которые объявлены для сотрудничества с планированием fork/join. Разделимые задачи также не должны выполнять блокирующее ввод-вывод и, в идеале, должны получать доступ к переменным, полностью независимым от переменных, к которым обращаются другие выполняемые задачи. Эти рекомендации слабо выполняются, не разрешая бросать проверенные исключения, такие как IOExceptions. Однако вычисления всё ещё могут столкнуться с непроверенными исключениями, которые перебрасываются вызывающим сторонам, пытающимся объединить их. Эти исключения могут дополнительно включать RejectedExecutionException, возникающие из-за истощения внутренних ресурсов, например, из-за невозможности выделения внутренних очередей задач. Переброшенные исключения ведут себя так же, как обычные исключения, но, при возможности, содержат трассировки стека (например, отображаемые с помощью ex.printStackTrace() ) и потока, инициировавшего вычисления, и потока, фактически столкнувшегося с исключением; по минимуму — только последнего.

Возможна разработка и использование задач ForkJoinTask, которые могут блокироваться, но для этого необходимо учитывать три фактора: (1) Завершение каких-либо других задач не должно зависеть от задачи, которая блокируется внешней синхронизацией или вводом-выводом. Стилевые асинхронные задачи, которые никогда не объединяются (например, подклассы CountedCompleter) часто попадают в эту категорию. (2) Чтобы минимизировать нагрузку на ресурсы, задачи должны быть маленькими; в идеале выполняя только (возможно) блокирующую операцию. (3) Если не используется API ForkJoinPool.ManagedBlocker или количество потенциально заблокированных задач меньше уровня параллелизма пула ForkJoinPool.getParallelism(), пул не может гарантировать достаточное количество потоков для обеспечения прогресса или хорошей производительности.

Основной метод ожидания завершения и извлечения результатов задачи — join(), но есть несколько вариантов: Методы Future.get() поддерживают прерывимые и/или временные ожидания завершения и сообщают результаты, используя соглашения Future. Метод invoke() семантически эквивалентен fork(); join(), но всегда пытается начать выполнение в текущем потоке. «Тихие» формы этих методов не извлекают результаты и не сообщают об исключениях. Это может быть полезно, когда выполняется набор задач, и вам нужно отложить обработку результатов или исключений до тех пор, пока все не завершатся. Метод invokeAll (доступный в нескольких версиях) выполняет наиболее распространённую форму параллельного вызова: разделение набора задач и объединение их всех.

В самых типичных случаях пара fork-join действует как вызов (fork) и возврат (join) из параллельной рекурсивной функции. Как и в случае с другими формами рекурсивных вызовов, возвраты (joins) должны выполняться с самого внутреннего уровня. Например, a.fork(); b.fork(); b.join(); a.join(); вероятно будет значительно эффективнее, чем объединение a перед b.

Статус выполнения задач может быть запрошен на нескольких уровнях детализации: isDone() — true, если задача завершилась любым способом (включая случай, когда задача была отменена без выполнения); isCompletedNormally() — true, если задача завершилась без отмены или исключения; isCancelled() — true, если задача была отменена (в этом случае getException(int) возвращает CancellationException); и isCompletedAbnormally() — true, если задача была отменена или столкнулась с исключением, в этом случае getException(int) вернёт либо встреченное исключение, либо CancellationException.

Класс ForkJoinTask обычно не наследуется напрямую. Вместо этого вы наследуете один из абстрактных классов, которые поддерживают определенный стиль обработки fork/join, обычно RecursiveAction для большинства вычислений, которые не возвращают результаты, RecursiveTask для тех, которые возвращают, и CountedCompleter для тех, в которых завершенные действия запускают другие действия. Обычно конкретный подкласс ForkJoinTask объявляет поля, составляющие его параметры, установленные в конструкторе, а затем определяет метод compute, который каким-либо образом использует управляющие методы, предоставляемые этим базовым классом.

Метод join() и его варианты подходят только для использования в том случае, когда зависимости завершения ациклические; то есть параллельное вычисление может быть представлено как ориентированный ациклический граф (DAG). В противном случае, выполнение может столкнуться с формой тупика, так как задачи циклически ожидают друг друга. Однако эта платформа поддерживает другие методы и техники (например, использование Phaser, helpQuiesce() и complete(V)), которые могут быть полезны при создании пользовательских подклассов для задач, которые не имеют статически структурированной структуры DAG. Для поддержки таких применений задача ForkJoinTask может быть атомарно помечена значением short с помощью setForkJoinTaskTag(short) или compareAndSetForkJoinTaskTag(short, short) и проверена с помощью getForkJoinTaskTag(). Реализация ForkJoinTask не использует эти protected методы или метки ни для каких целей, но они могут быть полезны при создании специализированных подклассов. Например, параллельные обходы графов могут использовать предоставленные методы для избежания повторного посещения узлов/задач, которые уже были обработаны. (Имена методов для маркировки громоздкие отчасти для поощрения определения методов, которые отражают их модели использования.)

Большинство базовых поддерживающих методов final, чтобы предотвратить переопределение реализаций, которые неразрывно связаны с базовой системой планирования легких задач. Разработчики, создающие новые базовые стили обработки fork/join, должны по минимуму реализовать protected методы exec(), setRawResult(V) и getRawResult(), а также добавить абстрактный вычислительный метод, который может быть реализован в его подклассах, возможно, опираясь на другие protected методы, предоставляемые этим классом.

Задачи ForkJoinTask должны выполнять сравнительно небольшое количество вычислений. Большие задачи должны быть разделены на более мелкие подзадачи, обычно с помощью рекурсивного разбиения. Как очень грубое правило, задача должна выполнять более 100 и менее 10000 базовых вычислительных шагов и избегать бесконечных циклов. Если задачи слишком большие, то параллелизм не может улучшить пропускную способность. Если слишком маленькие, то накладные расходы памяти и внутренней поддержки задач могут подавлять обработку.

Этот класс предоставляет adapt методы для Runnable и Callable, которые могут быть полезны при смешивании выполнения ForkJoinTasks с другими типами задач. Когда все задачи имеют этот вид, рассмотрите возможность использования пула, созданного в режиме asyncMode.

Задачи ForkJoinTask Serializable, что позволяет использовать их в расширениях, таких как удалённые фреймворки выполнения. Разумно сериализовать задачи только до или после, но не во время выполнения. Сериализация не используется во время самого выполнения.

С:
1.7
См. также:
  • Сериализованная форма
END_OF_DOCUMENT_MARKER

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в интерфейсе java.util.concurrent.Future

Future.State

Краткое описание конструкторов

Конструктор Описание
ForkJoinTask()
Конструктор для вызова подклассами.

Краткое описание методов

Модификатор и тип Метод Описание
static ForkJoinTask<?> adapt(Runnable runnable)
Возвращает новый ForkJoinTask, который выполняет метод run заданного Runnable в качестве действия и возвращает null-результат при вызове join().
static <T> ForkJoinTask<T> adapt(Runnable runnable, T result)
Возвращает новый ForkJoinTask, который выполняет метод run заданного Runnable в качестве действия и возвращает заданный результат при вызове join().
static <T> ForkJoinTask<T> adapt(Callable<? extends T> callable)
Возвращает новый ForkJoinTask, который выполняет метод call заданного Callable в качестве действия и возвращает его результат при вызове join(), преобразуя любые исключения checked в RuntimeException.
static <T> ForkJoinTask<T> adaptInterruptible(Callable<? extends T> callable)
Возвращает новый ForkJoinTask, который выполняет метод call заданного Callable в качестве действия и возвращает его результат при вызове join(), преобразуя любые исключения checked в RuntimeException.
boolean cancel(boolean mayInterruptIfRunning)
Попытка отменить выполнение этой задачи.
final boolean compareAndSetForkJoinTaskTag(short expect, short update)
Атомарно условно устанавливает значение тега для этой задачи.
void complete(V value)
Завершает эту задачу и, если она ещё не прервана или отменена, возвращает заданное значение в качестве результата последующих вызовов join и связанных операций.
void completeExceptionally(Throwable ex)
Завершает эту задачу аномально и, если она ещё не прервана или отменена, вызывает заданное исключение при вызове join и связанных операций.
protected abstract boolean exec()
Немедленно выполняет основное действие этой задачи и возвращает true, если после возврата из этого метода эта задача гарантированно завершена.
final ForkJoinTask<V> fork()
Организует асинхронное выполнение этой задачи в пуле, в котором выполняется текущая задача, если применимо, или используя ForkJoinPool.commonPool(), если нет 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()
Возвращает оценку количества задач, которые были порождены текущей рабочей нитью, но ещё не выполнены.
abstract V getRawResult()
Возвращает результат, который был бы возвращен join(), даже если эта задача завершилась аномально, или null, если эта задача не известна как завершенная.
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.
final short setForkJoinTaskTag(short newValue)
Атомарно устанавливает значение тега для этой задачи и возвращает старое значение.
protected abstract void setRawResult(V value)
Принудительно устанавливает заданное значение в качестве результата.
boolean tryUnfork()
Пытается отменить планирование этой задачи для выполнения.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе java.util.concurrent.Future

exceptionNow, resultNow, state

Подробное описание конструкторов

ForkJoinTask

public ForkJoinTask()
Конструктор для вызова подклассами.

Подробное описание методов

fork

public final ForkJoinTask<V> fork()
Организует асинхронное выполнение этой задачи в пуле, в котором выполняется текущая задача, если применимо, или с использованием ForkJoinPool.commonPool(), если нет inForkJoinPool(). Хотя это не обязательно, ошибочным является форкинг задачи более одного раза, если она не завершена и не перезапущена. Последующие изменения состояния этой задачи или любых данных, которые она обрабатывает, не обязательно будут последовательно наблюдаемыми ни одним потоком, кроме того, который ее выполняет, если не предшествуют вызовам join() или связанных методов, или вызову isDone(), возвращающему true.
Возвращает:
this, для упрощения использования

join

public final V join()
Возвращает результат вычисления, когда оно завершено. Этот метод отличается от get() тем, что результаты аномального завершения приводят к RuntimeException или Error, а не к ExecutionException, и что прерывания вызывающего потока не вызывают немедленного возвращения метода сбросом InterruptedException.
Возвращает:
вычисленный результат

invoke

public final V invoke()
Начинает выполнение этой задачи, ожидает ее завершения при необходимости и возвращает ее результат или сбрасывает (непроверенное) RuntimeException или Error, если это сделали лежащие в основе вычисления.
Возвращает:
вычисленный результат

invokeAll

public static void invokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2)
Форкит заданные задачи, возвращаясь, когда isDone выполняется для каждой задачи или возникает (непроверенное) исключение, в этом случае исключение перебрасывается. Если более чем одна задача сталкивается с исключением, этот метод выбрасывает любое из этих исключений. Если какая-либо задача сталкивается с исключением, другие могут быть отменены. Однако статус выполнения отдельных задач не гарантируется при возвращении исключения. Статус каждой задачи можно получить, используя getException() и связанные методы для проверки, были ли они отменены, завершены нормально или с исключением, или остались необработанными.
Параметры:
t1 - первая задача
t2 - вторая задача
Исключения:
NullPointerException - если какая-либо задача равна null

invokeAll

public static void invokeAll(ForkJoinTask<?>... tasks)
Форкит заданные задачи, возвращаясь, когда isDone выполняется для каждой задачи или возникает (непроверенное) исключение, в этом случае исключение перебрасывается. Если более чем одна задача сталкивается с исключением, этот метод выбрасывает любое из этих исключений. Если какая-либо задача сталкивается с исключением, другие могут быть отменены. Однако статус выполнения отдельных задач не гарантируется при возвращении исключения. Статус каждой задачи можно получить, используя getException() и связанные методы для проверки, были ли они отменены, завершены нормально или с исключением, или остались необработанными.
Параметры:
tasks - задачи
Исключения:
NullPointerException - если какая-либо задача равна null

invokeAll

public static <T extends ForkJoinTask<?>> Collection<T> invokeAll(Collection<T> tasks)
Форкит все задачи в заданном наборе, возвращаясь, когда isDone выполняется для каждой задачи или возникает (непроверенное) исключение, в этом случае исключение перебрасывается. Если более чем одна задача сталкивается с исключением, этот метод выбрасывает любое из этих исключений. Если какая-либо задача сталкивается с исключением, другие могут быть отменены. Однако статус выполнения отдельных задач не гарантируется при возвращении исключения. Статус каждой задачи можно получить, используя getException() и связанные методы для проверки, были ли они отменены, завершены нормально или с исключением, или остались необработанными.
Параметры типа:
T - тип значений, возвращаемых из задач
Параметры:
tasks - набор задач
Возвращает:
аргумент задач, для упрощения использования
Исключения:
NullPointerException - если tasks или любой элемент равны null

cancel

public boolean cancel(boolean mayInterruptIfRunning)
Попытка отменить выполнение этой задачи. Эта попытка завершится неудачей, если задача уже завершена или не может быть отменена по какой-либо другой причине. Если это удалось, и эта задача еще не началась, когда cancel был вызван, выполнение этой задачи подавляется. После успешного возвращения этого метода, если нет промежуточного вызова reinitialize(), последующие вызовы isCancelled(), isDone() и cancel вернут true, а вызовы join() и связанных методов приведут к CancellationException.

Этот метод может быть переопределен в подклассах, но в этом случае он должен гарантировать, что эти свойства выполняются. В частности, сам метод cancel не должен выбрасывать исключения.

Этот метод предназначен для вызова другими задачами. Чтобы завершить текущую задачу, вы можете просто вернуть или бросить непроверенное исключение из ее метода вычисления или вызвать completeExceptionally(Throwable).

Определено в:
cancel в интерфейсе Future<V>
Параметры:
mayInterruptIfRunning - это значение не влияет на реализацию по умолчанию, так как прерывания не используются для управления отменной.
Возвращает:
true если эта задача теперь отменена

isDone

public final boolean isDone()
Описание скопировано из интерфейса: Future
Возвращает true если эта задача завершена. Завершение может быть вызвано нормальным завершением, исключением или отменением — во всех этих случаях этот метод вернет true.
Определено в:
isDone в интерфейсе Future<V>
Возвращает:
true если эта задача завершена

isCancelled

public final boolean isCancelled()
Описание скопировано из интерфейса: Future
Возвращает true если эта задача была отменена до ее нормального завершения.
Определено в:
isCancelled в интерфейсе Future<V>
Возвращает:
true если эта задача была отменена до завершения

isCompletedAbnormally

public final boolean isCompletedAbnormally()
Возвращает true если эта задача сгенерировала исключение или была отменена.
Возвращает:
true если эта задача сгенерировала исключение или была отменена

isCompletedNormally

public final boolean isCompletedNormally()
Возвращает true если эта задача завершилась без генерации исключения и не была отменена.
Возвращает:
true если эта задача завершилась без генерации исключения и не была отменена

getException

public final Throwable getException()
Возвращает исключение, сгенерированное основным вычислением, или CancellationException если отменено, или null если не было или метод еще не завершен.
Возвращает:
исключение, или null если отсутствует

completeExceptionally

public void completeExceptionally(Throwable ex)
Завершает эту задачу аномально и, если она еще не прервана или не отменена, вызывает сброс заданного исключения при join и связанных операциях. Этот метод может быть использован для создания исключений в асинхронных задачах или для принудительного завершения задач, которые иначе не завершились бы. Его использование в других ситуациях не рекомендуется. Этот метод переопределяемый, но переопределенные версии должны вызывать реализацию super для поддержания гарантий.
Параметры:
ex - исключение для сброса. Если это исключение не является RuntimeException или Error, фактически сброшенное исключение будет RuntimeException с причиной ex.

complete

public void complete(V value)
Завершает эту задачу, и если она еще не прервана или не отменена, возвращает заданное значение в качестве результата последующих вызовов join и связанных операций. Этот метод может быть использован для предоставления результатов для асинхронных задач или для предоставления альтернативной обработки для задач, которые иначе не завершатся нормально. Его использование в других ситуациях не рекомендуется. Этот метод переопределяемый, но переопределенные версии должны вызывать реализацию super для поддержания гарантий.
Параметры:
value - значение результата для этой задачи

quietlyComplete

public final void quietlyComplete()
Завершает эту задачу нормально без установки значения. Последнее значение, установленное setRawResult(V) (или null по умолчанию), будет возвращено в качестве результата последующих вызовов join и связанных операций.
C момента:
1.8

get

public final V get() throws InterruptedException, ExecutionException
Ожидает, если необходимо, завершения вычисления, а затем извлекает его результат.
Specified by:
get в интерфейсе Future<V>
Returns:
вычисленный результат
Throws:
CancellationException - если вычисление было отменено
ExecutionException - если вычисление вызвало исключение
InterruptedException - если текущая нить не является членом ForkJoinPool и была прервана во время ожидания

get

public final V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
Ожидает, если необходимо, не более заданного времени завершения вычисления, а затем извлекает его результат, если он доступен.
Specified by:
get в интерфейсе Future<V>
Parameters:
timeout - максимальное время ожидания
unit - единица измерения времени аргумента таймаута
Returns:
вычисленный результат
Throws:
CancellationException - если вычисление было отменено
ExecutionException - если вычисление вызвало исключение
InterruptedException - если текущая нить не является членом ForkJoinPool и была прервана во время ожидания
TimeoutException - если ожидание истекло

quietlyJoin

public final void quietlyJoin()
Присоединяется к этой задаче без возвращения ее результата или выброса ее исключения. Этот метод может быть полезен при обработке коллекций задач, когда некоторые из них были отменены или известно, что они прервались.

quietlyInvoke

public final void quietlyInvoke()
Начинает выполнение этой задачи и ожидает ее завершения при необходимости, без возвращения ее результата или выброса ее исключения.

quietlyJoin

public final boolean quietlyJoin(long timeout, TimeUnit unit) throws InterruptedException
Пытается присоединиться к этой задаче, возвращая true, если она завершилась (возможно, с исключением) до заданного таймаута и текущая нить не была прервана.
Parameters:
timeout - максимальное время ожидания
unit - единица измерения времени аргумента таймаута
Returns:
true, если эта задача завершилась
Throws:
InterruptedException - если текущая нить была прервана во время ожидания
Since:
19

quietlyJoinUninterruptibly

public final boolean quietlyJoinUninterruptibly(long timeout, TimeUnit unit)
Пытается присоединиться к этой задаче, возвращая true, если она завершилась (возможно, с исключением) до заданного таймаута.
Parameters:
timeout - максимальное время ожидания
unit - единица измерения времени аргумента таймаута
Returns:
true, если эта задача завершилась
Since:
19

helpQuiesce

public static void helpQuiesce()
Возможно выполняет задачи до тех пор, пока пул, содержащий текущую задачу, не находится в состоянии покоя. Этот метод может быть полезен в конструкциях, в которых многие задачи создаются с помощью fork, но ни одна из них явно не присоединяется; вместо этого они выполняются до тех пор, пока все не будут обработаны.

reinitialize

public void reinitialize()
Сбрасывает внутреннее состояние учёта этой задачи, позволяя последующее fork. Этот метод позволяет повторно использовать эту задачу, но только если повторное использование происходит, когда эта задача либо никогда не была создана с помощью fork, либо была создана с помощью fork, затем завершена и все ожидающие присоединения к этой задаче также завершились. Эффекты при любых других условиях использования не гарантируются. Этот метод может быть полезен при выполнении предварительно построенных деревьев подзадач в циклах.

После завершения этого метода, isDone() сообщает false, и getException() сообщает null. Однако значение, возвращаемое getRawResult, не изменяется. Чтобы очистить это значение, можно вызвать setRawResult(null).

getPool

public static ForkJoinPool getPool()
Возвращает пул, содержащий текущую нить, или null если текущая нить выполняется вне ForkJoinPool.

Этот метод возвращает null тогда и только тогда, когда inForkJoinPool() возвращает false.

Returns:
пул, или null если нет

inForkJoinPool

public static boolean inForkJoinPool()
Возвращает true если текущая нить является ForkJoinWorkerThread, выполняющей вычисление в ForkJoinPool.
Returns:
true если текущая нить является ForkJoinWorkerThread, выполняющей вычисление в ForkJoinPool, или false в противном случае

tryUnfork

public boolean tryUnfork()
Пытается отменить планирование этой задачи для выполнения. Этот метод обычно (но не гарантировано) удается, если эта задача является последней созданной задачей текущей нити с помощью fork и еще не начала выполняться в другой нити. Этот метод может быть полезен при организации альтернативной локальной обработки задач, которые могли быть, но не были, похищены.
Returns:
true если отменено

getQueuedTaskCount

public static int getQueuedTaskCount()
Возвращает приблизительное количество задач, которые были созданы с помощью fork текущей рабочей нитью, но еще не выполнены. Это значение может быть полезно для эвристических решений о том, следует ли создавать другие задачи с помощью fork.
Returns:
количество задач

getSurplusQueuedTaskCount

public static int getSurplusQueuedTaskCount()
Возвращает приблизительное количество дополнительных локально очередированных задач, хранимых текущей рабочей нитью, по сравнению с другими рабочими нитями, которые могут их украсть, или ноль, если эта нить не работает в ForkJoinPool. Это значение может быть полезно для эвристических решений о том, следует ли создавать другие задачи с помощью fork. Во многих случаях использования ForkJoinTasks в установившемся состоянии каждая рабочая нить должна стремиться поддерживать небольшой постоянный избыток (например, 3) задач и обрабатывать вычисления локально, если этот порог превышен.
Returns:
избыточное количество задач, которое может быть отрицательным

getRawResult

public abstract V getRawResult()
Возвращает результат, который был бы возвращен методом join(), даже если эта задача завершилась аномально, или null если о завершении этой задачи ничего не известно. Этот метод предназначен для отладки, а также для поддержки расширений. Его использование в любом другом контексте не рекомендуется.
Returns:
результат или null если не завершена

setRawResult

protected abstract void setRawResult(V value)
Вынуждает возвращение заданного значения в качестве результата. Этот метод предназначен для поддержки расширений и в общем случае не должен вызываться иначе.
Parameters:
value - значение

exec

protected abstract boolean exec()
Немедленно выполняет основное действие этой задачи и возвращает true, если по завершении этого метода эта задача гарантированно завершена. В противном случае этот метод может вернуть false, чтобы указать, что эта задача не обязательно завершена (или неизвестно, завершена ли она), например, при асинхронных действиях, требующих явных вызовов методов завершения. Этот метод также может сгенерировать (непроверенное) исключение, чтобы указать аномальное завершение. Этот метод предназначен для поддержки расширений и в общем случае не должен вызываться иначе.
Returns:
true если эта задача известна как завершенная нормально

peekNextLocalTask

protected static ForkJoinTask<?> peekNextLocalTask()
Возвращает, но не отменяет и не выполняет, задачу, помещённую в очередь текущей нитью, но ещё не выполненную, если она немедленно доступна. Нет гарантии, что эта задача будет обработана или выполнена следующей. Наоборот, этот метод может вернуть null, даже если задача существует, но к ней нельзя получить доступ без конфликта с другими нитями. Этот метод предназначен в основном для поддержки расширений и вряд ли будет полезен в других случаях.
Returns:
следующая задача, или null если нет

pollNextLocalTask

protected static ForkJoinTask<?> pollNextLocalTask()
Отменяет и возвращает без выполнения следующую задачу, помещённую в очередь текущей нитью, но ещё не выполненную, если текущая нить работает в ForkJoinPool. Этот метод предназначен в основном для поддержки расширений и вряд ли будет полезен в других случаях.
Returns:
следующая задача, или null если нет

pollTask

protected static ForkJoinTask<?> pollTask()
Если текущая нить работает в ForkJoinPool, отменяет и возвращает без выполнения следующую задачу, помещённую в очередь текущей нитью, но ещё не выполненную, если она доступна, или, если нет, задачу, созданную с помощью fork другой нитью, если она доступна. Доступность может быть временной, поэтому результат null не обязательно подразумевает состояние покоя пула, в котором работает эта задача. Этот метод предназначен в основном для поддержки расширений и вряд ли будет полезен в других случаях.
Returns:
задача, или null если нет

pollSubmission

protected static ForkJoinTask<?> pollSubmission()
Если текущий поток работает в ForkJoinPool, то он отменяет и возвращает, не выполняя, задачу, внешне переданную в пул, если таковая доступна. Доступность может быть временной, поэтому результат null не обязательно подразумевает затишье в пуле. Этот метод в первую очередь предназначен для расширений и вряд ли будет полезен в других случаях.
Возвращает:
задачу или null, если таковых нет
С:
9

getForkJoinTaskTag

public final short getForkJoinTaskTag()
Возвращает метку для этой задачи.
Возвращает:
метку для этой задачи
С:
1.8

setForkJoinTaskTag

public final short setForkJoinTaskTag(short newValue)
Атомарно устанавливает значение метки для этой задачи и возвращает старое значение.
Параметры:
newValue - новое значение метки
Возвращает:
предыдущее значение метки
С:
1.8

compareAndSetForkJoinTaskTag

public final boolean compareAndSetForkJoinTaskTag(short expect, short update)
Атомарно условно устанавливает значение метки для этой задачи. Среди других применений, метки могут использоваться как маркеры посещения в задачах, работающих с графами, как в методах, которые проверяют: if (task.compareAndSetForkJoinTaskTag((short)0, (short)1)) перед обработкой, в противном случае выходя, потому что узел уже был посещён.
Параметры:
expect - ожидаемое значение метки
update - новое значение метки
Возвращает:
true при успехе; т.е., текущее значение было равно expect и было изменено на update.
С:
1.8

adapt

public static ForkJoinTask<?> adapt(Runnable runnable)
Возвращает новую ForkJoinTask, которая выполняет метод run заданного Runnable в качестве своего действия и возвращает значение null при join().
Параметры:
runnable - действие Runnable
Возвращает:
задачу

adapt

public static <T> ForkJoinTask<T> adapt(Runnable runnable, T result)
Возвращает новую ForkJoinTask, которая выполняет метод run заданного Runnable в качестве своего действия и возвращает заданное значение при join().
Параметры типа:
T - тип результата
Параметры:
runnable - действие Runnable
result - результат по завершении
Возвращает:
задачу

adapt

public static <T> ForkJoinTask<T> adapt(Callable<? extends T> callable)
Возвращает новую ForkJoinTask, которая выполняет метод call заданного Callable в качестве своего действия и возвращает его результат при join(), переводя любые проверенные исключения в RuntimeException.
Параметры типа:
T - тип результата callable
Параметры:
callable - действие callable
Возвращает:
задачу

adaptInterruptible

public static <T> ForkJoinTask<T> adaptInterruptible(Callable<? extends T> callable)
Возвращает новую ForkJoinTask, которая выполняет метод call заданного Callable в качестве своего действия и возвращает его результат при join(), переводя любые проверенные исключения в RuntimeException. Кроме того, вызовы cancel с mayInterruptIfRunning true будут пытаться прервать поток, выполняющий задачу.
Параметры типа:
T - тип результата callable
Параметры:
callable - действие callable
Возвращает:
задачу
С:
19

© 1993, 2023, 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/21/docs/api/java.base/java/util/concurrent/ForkJoinTask.html

Spec-Zone.ru

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