Класс 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
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе 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 <T> ForkJoinTask |
adaptInterruptible |
Возвращает новый ForkJoinTask, который выполняет метод call заданного Callable в качестве действия и возвращает его результат при вызове join(), преобразуя любые исключения checked в RuntimeException. |
boolean |
cancel |
Попытка отменить выполнение этой задачи. |
final boolean |
compareAndSetForkJoinTaskTag |
Атомарно условно устанавливает значение тега для этой задачи. |
void |
complete |
Завершает эту задачу и, если она ещё не прервана или отменена, возвращает заданное значение в качестве результата последующих вызовов join и связанных операций. |
void |
completeExceptionally |
Завершает эту задачу аномально и, если она ещё не прервана или отменена, вызывает заданное исключение при вызове join и связанных операций. |
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. |
final short |
setForkJoinTaskTag |
Атомарно устанавливает значение тега для этой задачи и возвращает старое значение. |
protected abstract void |
setRawResult |
Принудительно устанавливает заданное значение в качестве результата. |
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()
Futuretrue если эта задача завершена. Завершение может быть вызвано нормальным завершением, исключением или отменением — во всех этих случаях этот метод вернет true.- Определено в:
-
isDoneв интерфейсеFuture<V> - Возвращает:
-
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если эта задача завершилась без генерации исключения и не была отменена
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
- Parameters:
-
timeout- максимальное время ожидания -
unit- единица измерения времени аргумента таймаута - Returns:
- true, если эта задача завершилась
- Throws:
-
InterruptedException- если текущая нить была прервана во время ожидания - Since:
- 19
quietlyJoinUninterruptibly
public final boolean quietlyJoinUninterruptibly(long timeout, TimeUnit unit)
- Parameters:
-
timeout- максимальное время ожидания -
unit- единица измерения времени аргумента таймаута - Returns:
- true, если эта задача завершилась
- Since:
- 19
helpQuiesce
public static void helpQuiesce()
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()
- Returns:
-
trueесли отменено
getQueuedTaskCount
public static int getQueuedTaskCount()
- Returns:
- количество задач
getSurplusQueuedTaskCount
public static int getSurplusQueuedTaskCount()
- Returns:
- избыточное количество задач, которое может быть отрицательным
getRawResult
public abstract V getRawResult()
join(), даже если эта задача завершилась аномально, или null если о завершении этой задачи ничего не известно. Этот метод предназначен для отладки, а также для поддержки расширений. Его использование в любом другом контексте не рекомендуется.- Returns:
- результат или
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 не обязательно подразумевает затишье в пуле. Этот метод в первую очередь предназначен для расширений и вряд ли будет полезен в других случаях.- Возвращает:
- задачу или
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