Класс ForkJoinTask<V>
- Type Parameters:
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()) как потока, инициировавшего вычисление, так и потока, фактически столкнувшегося с исключением; по минимуму только последнего.
Возможна разработка и использование ForkJoinTasks, которые могут блокироваться, но это требует трёх дополнительных соображений: (1) Завершение небольшого количества или отсутствия других задач не должно зависеть от задачи, блокирующей внешнюю синхронизацию или ввод-вывод. Задачи типа async, которые никогда не объединяются (например, подклассы 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(boolean) возвращает CancellationException); и isCompletedAbnormally() равно true, если задача была либо отменена, либо столкнулась с исключением, в этом случае getException(boolean) вернёт либо возникшее исключение, либо 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 методы, предоставляемые этим классом.
ForkJoinTasks должны выполнять относительно небольшие объёмы вычислений. Большие задачи должны быть разделены на более мелкие подзадачи, обычно через рекурсивную декомпозицию. В качестве очень приблизительного правила, задача должна выполнять более 100 и менее 10000 базовых вычислительных шагов и должна избегать бесконечных циклов. Если задачи слишком велики, то параллелизм не может улучшить производительность. Если слишком малы, то накладные расходы памяти и внутренней поддержки задач могут переполнить обработку.
Этот класс предоставляет adapt методы для Runnable и Callable, которые могут быть полезны при смешивании выполнения ForkJoinTasks с другими типами задач. Когда все задачи имеют эту форму, рассмотрите возможность использования пула, созданного в режиме asyncMode.
ForkJoinTasks являются Serializable, что позволяет использовать их в расширениях, таких как фреймворки удалённого выполнения. Очевидно, задачи сериализуются только до или после, но не во время выполнения. Сериализация не используется во время самого выполнения.
- Since:
- 1.7
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе java.util.concurrent.Future
Future.State
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ForkJoinTask() |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static ForkJoinTask |
adapt |
Возвращает новый ForkJoinTask, который выполняет метод run заданного Runnable в качестве своего действия, и возвращает null в результате при join(). |
static <T> ForkJoinTask |
adapt |
Возвращает новый ForkJoinTask, который выполняет метод run заданного Runnable в качестве своего действия, и возвращает заданный результат при join(). |
static <T> ForkJoinTask |
adapt |
Возвращает новый ForkJoinTask, который выполняет метод call заданного Callable в качестве своего действия, и возвращает его результат при join(), переводя любые возникшие checked исключения в RuntimeException. |
static ForkJoinTask |
adaptInterruptible |
Возвращает новый ForkJoinTask, который выполняет метод
run заданного Runnable в качестве своего действия, и возвращает null в результате при join(), переводя любые возникшие checked исключения в RuntimeException. |
static <T> ForkJoinTask |
adaptInterruptible |
Возвращает новый ForkJoinTask, который выполняет метод run заданного Runnable в качестве своего действия, и возвращает заданный результат при join(), переводя любые возникшие checked исключения в RuntimeException. |
static <T> ForkJoinTask |
adaptInterruptible |
Возвращает новый ForkJoinTask, который выполняет метод call заданного Callable в качестве своего действия, и возвращает его результат при join(), переводя любые возникшие checked исключения в RuntimeException. |
boolean |
cancel |
Попытка отменить выполнение этой задачи. |
final boolean |
compareAndSetForkJoinTaskTag |
Атомарно условно устанавливает значение тега для этой задачи. |
void |
complete |
Завершает эту задачу, и если она ещё не прервана или отменена, возвращает заданное значение в качестве результата последующих вызовов join и связанных операций. |
void |
completeExceptionally |
Завершает эту задачу аномально, и если она ещё не прервана или отменена, вызывает заданное исключение при join и связанных операциях. |
Throwable |
exceptionNow() |
Возвращает исключение, брошенное задачей, без ожидания. |
protected abstract boolean |
exec() |
Немедленно выполняет базовое действие этой задачи и возвращает true, если после возврата из этого метода эта задача гарантированно завершится. |
final ForkJoinTask |
fork() |
Организует асинхронное выполнение этой задачи в пуле, в котором выполняется текущая задача, если применимо, или используя ForkJoinPool.commonPool(), если нет inForkJoinPool(). |
final V |
get() |
Ждёт, если необходимо, завершения вычисления, а затем извлекает его результат. |
final V |
get |
Ждёт, если необходимо, не более заданного времени завершения вычисления, а затем извлекает его результат, если он доступен. |
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<?>> |
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 |
Атомарно устанавливает значение тега для этой задачи и возвращает старое значение. |
protected abstract void |
setRawResult |
Вынуждает возвращение заданного значения в качестве результата. |
Future.State |
state() |
Возвращает состояние вычисления. |
boolean |
tryUnfork() |
Пытается отменить планирование этой задачи для выполнения. |
Подробное описание конструкторов
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- набор задач - Возвращает:
- аргумент tasks, для упрощения использования
- Исключения:
-
NullPointerException- если tasks или любой элемент равны null
cancel
public boolean cancel(boolean mayInterruptIfRunning)
cancel вызвана, выполнение этой задачи подавляется. После успешного возврата этого метода, если не будет промежуточного вызова reinitialize(), последующие вызовы isCancelled(), isDone() и cancel вернут true, и вызовы join() и связанных методов приведут к CancellationException. Этот метод может быть переопределён в подклассах, но в таком случае должен гарантировать сохранение этих свойств. В частности, сам метод cancel не должен выбрасывать исключений.
Этот метод предназначен для вызова другими задачами. Для завершения текущей задачи можно просто вернуть или бросить непроверенное исключение из её метода вычислений или вызвать completeExceptionally(Throwable).
isDone
public final boolean isDone()
Futuretrue, если эта задача завершена. Завершение может быть вызвано нормальным завершением, исключением или отменой — во всех этих случаях этот метод вернёт true.isCancelled
public final boolean isCancelled()
Futuretrue, если эта задача была отменена до нормального завершения.- Указано в:
-
isCancelledв интерфейсеFuture<V> - Возвращает:
-
true, если эта задача была отменена до завершения
isCompletedAbnormally
public final boolean isCompletedAbnormally()
true, если эта задача выбросила исключение или была отменена.- Возвращает:
-
true, если эта задача выбросила исключение или была отменена
isCompletedNormally
public final boolean isCompletedNormally()
true, если эта задача завершилась без выброса исключения и не была отменена.- Возвращает:
-
true, если эта задача завершилась без выброса исключения и не была отменена
state
resultNow
public V resultNow()
FutureЭтот метод предназначен для случаев, когда вызывающий код знает, что задача уже успешно завершилась, например, при фильтрации потока объектов Future по успешным задачам и использовании операции отображения для получения потока результатов.
results = futures.stream()
.filter(f -> f.state() == Future.State.SUCCESS)
.map(Future::resultNow)
.toList();
exceptionNow
public Throwable exceptionNow()
FutureЭтот метод предназначен для случаев, когда вызывающий код знает, что задача уже завершилась с исключением.
- Указано в:
-
exceptionNowв интерфейсеFuture<V> - Возвращает:
- исключение, сгенерированное задачей
- C момента:
- 19
getИсключение
public final Throwable getException()
CancellationException, если вычисление было отменено, или null, если исключение отсутствует или метод ещё не завершён.- Возвращает:
- исключение, или
null, если исключение отсутствует
completeИсключительно
public void completeExceptionally(Throwable ex)
join и смежных операциях. Этот метод может использоваться для создания исключений в асинхронных задачах или для принудительного завершения задач, которые не завершаются иначе. Использование в других ситуациях не рекомендуется. Этот метод переопределяемый, но переопределённые версии должны вызывать super реализацию, чтобы сохранить гарантии.- Параметры:
-
ex- исключение, которое нужно сгенерировать. Если это исключение не являетсяRuntimeExceptionилиError, фактически сгенерированное исключение будетRuntimeExceptionс причинойex.
завершить
public void complete(V value)
join и связанных операций. Этот метод может использоваться для предоставления результатов асинхронных задач или для альтернативной обработки задач, которые иначе не завершатся нормально. Использование в других ситуациях не рекомендуется. Этот метод переопределяемый, но переопределённые версии должны вызывать super реализацию, чтобы сохранить гарантии.- Параметры:
-
value- значение результата для этой задачи
quietlyЗавершить
public final void quietlyComplete()
setRawResult(V) (или
null по умолчанию), будет возвращено в качестве результата последующих вызовов join и связанных операций.- Since:
- 1.8
получить
public final V get() throws InterruptedException, ExecutionException
- Определено в:
-
getв интерфейсеFuture<V> - Возвращает:
- вычисленный результат
- Исключения:
-
CancellationException- если вычисление было отменено -
ExecutionException- если вычисление сгенерировало исключение -
InterruptedException- если текущий поток не является членом ForkJoinPool и был прерван во время ожидания
получить
public final V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
- Определено в:
-
getв интерфейсеFuture<V> - Параметры:
-
timeout- максимальное время ожидания -
unit- единица измерения времени параметра timeout - Возвращает:
- вычисленный результат
- Исключения:
-
CancellationException- если вычисление было отменено -
ExecutionException- если вычисление сгенерировало исключение -
InterruptedException- если текущий поток не является членом ForkJoinPool и был прерван во время ожидания -
TimeoutException- если ожидание истекло
quietlyПрисоединиться
public final void quietlyJoin()
quietlyВызвать
public final void quietlyInvoke()
quietlyПрисоединиться
public final boolean quietlyJoin(long timeout, TimeUnit unit) throws InterruptedException
- Параметры:
-
timeout- максимальное время ожидания -
unit- единица измерения времени параметра timeout - Возвращает:
- true, если задача завершилась
- Исключения:
-
InterruptedException- если текущий поток был прерван во время ожидания - Since:
- 19
quietlyПрисоединитьсяНепрерывно
public final boolean quietlyJoinUninterruptibly(long timeout, TimeUnit unit)
- Параметры:
-
timeout- максимальное время ожидания -
unit- единица измерения времени параметра timeout - Возвращает:
- true, если задача завершилась
- Since:
- 19
помочьЗатихнуть
public static void helpQuiesce()
переинициализировать
public void reinitialize()
fork. Этот метод позволяет повторно использовать эту задачу, но только если повторное использование происходит, когда эта задача либо никогда не форковалась, либо была форкована, затем завершена, и все ожидающие присоединения к этой задаче также завершены. Эффекты при любых других условиях использования не гарантируются. Этот метод может быть полезен при выполнении предопределённых деревьев подзадач в циклах. После выполнения этого метода, isDone() сообщает false, и getException() сообщает
null. Однако, значение, возвращённое getRawResult, не изменяется. Чтобы очистить это значение, можно вызвать
setRawResult(null).
получитьПул
public static ForkJoinPool getPool()
null, если текущий поток выполняется вне любого ForkJoinPool. Этот метод возвращает null тогда и только тогда, когда inForkJoinPool() возвращает false.
- Возвращает:
- пул, или
null, если пул отсутствует
вForkJoinПуле
public static boolean inForkJoinPool()
true, если текущий поток является ForkJoinWorkerThread, выполняющим вычисление в ForkJoinPool.- Возвращает:
-
true, если текущий поток являетсяForkJoinWorkerThread, выполняющим вычисление в ForkJoinPool, илиfalseв противном случае
попытатьсяОтфоркнуть
public boolean tryUnfork()
- Возвращает:
-
true, если отфорковано
количествоОчередныхЗадач
public static int getQueuedTaskCount()
- Возвращает:
- количество задач
количествоИзлишнихОчередныхЗадач
public static int getSurplusQueuedTaskCount()
- Возвращает:
- излишнее количество задач, которое может быть отрицательным
сыройРезультат
public abstract V getRawResult()
join(), даже если эта задача завершилась аномально, или null, если об окончании этой задачи ничего неизвестно. Этот метод предназначен для отладки, а также для поддержки расширений. Его использование в любом другом контексте не рекомендуется.- Возвращает:
- результат, или
null, если задача не завершена
setRawResult
protected abstract void setRawResult(V value)
- Parameters:
-
value- значение
exec
protected abstract boolean exec()
- Returns:
-
true, если известно, что задача завершилась успешно
peekNextLocalTask
protected static ForkJoinTask<?> peekNextLocalTask()
- Returns:
- следующую задачу или
null, если доступные задачи отсутствуют
pollNextLocalTask
protected static ForkJoinTask<?> pollNextLocalTask()
- Returns:
- следующую задачу или
null, если доступные задачи отсутствуют
pollTask
protected static ForkJoinTask<?> pollTask()
null не обязательно означает бездействия пула задач, в котором работает эта задача. Этот метод в первую очередь предназначен для поддержки расширений и вряд ли будет полезен в других случаях.- Returns:
- задачу или
null, если доступные задачи отсутствуют
pollSubmission
protected static ForkJoinTask<?> pollSubmission()
null не обязательно означает бездействия пула. Этот метод в первую очередь предназначен для поддержки расширений и вряд ли будет полезен в других случаях.- Returns:
- задачу или
null, если доступные задачи отсутствуют - Since:
- 9
getForkJoinTaskTag
public final short getForkJoinTaskTag()
- Returns:
- метку для этой задачи
- Since:
- 1.8
setForkJoinTaskTag
public final short setForkJoinTaskTag(short newValue)
- Parameters:
-
newValue- новое значение метки - Returns:
- предыдущее значение метки
- Since:
- 1.8
compareAndSetForkJoinTaskTag
public final boolean compareAndSetForkJoinTaskTag(short expect, short update)
if (task.compareAndSetForkJoinTaskTag((short)0, (short)1)) перед обработкой, иначе выходят, потому что узел уже посещён.- Parameters:
-
expect- ожидаемое значение метки -
update- новое значение метки - Returns:
-
true, если успешно; т.е., текущее значение было равноexpectи было изменено наupdate. - Since:
- 1.8
adapt
public static ForkJoinTask<?> adapt(Runnable runnable)
ForkJoinTask, которая выполняет метод run заданного Runnable в качестве своего действия и возвращает null-результат при join().- Parameters:
-
runnable- действие Runnable - Returns:
- задачу
adapt
public static <T> ForkJoinTask<T> adapt(Runnable runnable, T result)
ForkJoinTask, которая выполняет метод run заданного Runnable в качестве своего действия и возвращает заданный результат при join().- Type Parameters:
T- тип результата- Parameters:
-
runnable- действие Runnable -
result- результат по завершении - Returns:
- задачу
adapt
public static <T> ForkJoinTask<T> adapt(Callable<? extends T> callable)
ForkJoinTask, которая выполняет метод call заданного Callable в качестве своего действия и возвращает его результат при join(), переводя любые проверенные исключения в RuntimeException.- Type Parameters:
T- тип результата вызова- Parameters:
-
callable- действие Callable - Returns:
- задачу
adaptInterruptible
public static <T> ForkJoinTask<T> adaptInterruptible(Callable<? extends T> callable)
ForkJoinTask, которая выполняет метод call заданного Callable в качестве своего действия и возвращает его результат при join(), переводя любые проверенные исключения в RuntimeException. Дополнительно, вызовы cancel с mayInterruptIfRunning
true попытаются прервать нить, выполняющую задачу.- Type Parameters:
T- тип результата вызова- Parameters:
-
callable- действие Callable - Returns:
- задачу
- Since:
- 19
adaptInterruptible
public static <T> ForkJoinTask<T> adaptInterruptible(Runnable runnable, T result)
ForkJoinTask, которая выполняет метод run заданного Runnable в качестве своего действия и возвращает заданный результат при join(), переводя любые проверенные исключения в RuntimeException. Дополнительно, вызовы cancel с mayInterruptIfRunning
true попытаются прервать нить, выполняющую задачу.- Type Parameters:
T- тип результата- Parameters:
-
runnable- действие Runnable -
result- результат по завершении - Returns:
- задачу
- Since:
- 22
adaptInterruptible
public static ForkJoinTask<?> adaptInterruptible(Runnable runnable)
ForkJoinTask, которая выполняет метод
run заданного Runnable в качестве своего действия и возвращает null при join(), переводя любые проверенные исключения в RuntimeException. Дополнительно, вызовы cancel с
mayInterruptIfRunning true попытаются прервать нить, выполняющую задачу.- Parameters:
-
runnable- действие Runnable - Returns:
- задачу
- Since:
- 22
© 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/ForkJoinTask.html