Spec-Zone.ru › OpenJDK 25

Класс ForkJoinPool

java.lang.Object
java.util.concurrent.AbstractExecutorService
java.util.concurrent.ForkJoinPool
Все реализуемые интерфейсы:
AutoCloseable, Executor, ExecutorService, ScheduledExecutorService
public class ForkJoinPool extends AbstractExecutorService implements ScheduledExecutorService
ExecutorService для выполнения задач ForkJoinTask. ForkJoinPool предоставляет точку входа для отправки задач клиентами, не являющимися ForkJoinTask, а также операции управления и мониторинга.

ForkJoinPool отличается от других видов ExecutorService главным образом использованием work-stealing (похищения работ): все потоки в пуле пытаются найти и выполнить задачи, отправленные в пул и/или созданные другими активными задачами (в конечном счёте блокируясь в ожидании работы, если её нет). Это обеспечивает эффективную обработку, когда большинство задач порождают другие подзадачи (как это делают большинство задач ForkJoinTask), а также когда множество небольших задач отправляется в пул внешними клиентами. В частности, если в конструкторах установить asyncMode в значение true, ForkJoinPool также могут быть подходящими для использования с задачами событийного типа, которые никогда не объединяются. Все рабочие потоки инициализируются с параметром Thread.isDaemon(), установленным в значение true.

Доступен статический commonPool(), подходящий для большинства приложений. Общий пул используется любой задачей ForkJoinTask, которая явно не отправлена в указанный пул. Использование общего пула обычно сокращает потребление ресурсов (его потоки медленно освобождаются в периоды неиспользования и восстанавливаются при последующем использовании).

Для приложений, которым требуются отдельные или настраиваемые пулы, можно создать ForkJoinPool с заданным целевым уровнем параллелизма; по умолчанию он равен числу доступных процессоров. Пул пытается поддерживать достаточное количество активных (или доступных) потоков, динамически добавляя, приостанавливая или возобновляя внутренние рабочие потоки, даже если некоторые задачи заблокированы в ожидании объединения с другими. Однако такие корректировки не гарантируются при блокировке ввода-вывода или другой неуправляемой синхронизации. Вложенный интерфейс ForkJoinPool.ManagedBlocker позволяет расширить набор поддерживаемых видов синхронизации. Политики по умолчанию можно переопределить с помощью конструктора с параметрами, соответствующими описанным в классе ThreadPoolExecutor.

Помимо методов выполнения задач и управления жизненным циклом, этот класс предоставляет методы проверки состояния (например, getStealCount()), предназначенные для помощи в разработке, настройке и мониторинге приложений fork/join. Кроме того, метод toString() возвращает удобное для неформального мониторинга представление состояния пула.

Как и в случае с другими ExecutorServices, существуют три основных метода выполнения задач, приведённые в следующей таблице. Они предназначены прежде всего для клиентов, ещё не участвующих в вычислениях fork/join в текущем пуле. Основные формы этих методов принимают экземпляры ForkJoinTask, но перегруженные формы также допускают смешанное выполнение действий на основе обычных Runnable или Callable. Однако задачи, уже выполняющиеся в пуле, обычно должны использовать формы для выполнения внутри вычислений, перечисленные в таблице, за исключением задач асинхронного событийного типа, которые обычно не объединяются; в этом случае различия между методами невелики.

Сводка методов выполнения задач
Вызов из клиента, не участвующего в fork/join Вызов из вычислений fork/join
Организовать асинхронное выполнение execute(ForkJoinTask) ForkJoinTask.fork()
Дождаться результата и получить его invoke(ForkJoinTask) ForkJoinTask.invoke()
Организовать выполнение и получить Future submit(ForkJoinTask) ForkJoinTask.fork() (ForkJoinTasks являются Future)

Кроме того, этот класс поддерживает методы ScheduledExecutorService для отложенного или периодического выполнения задач, а также метод submitWithTimeout(Callable, long, TimeUnit, Consumer) для отмены задач, выполнение которых занимает слишком много времени. Запланированные функции или действия могут создавать и вызывать другие ForkJoinTasks. Отложенные действия становятся доступными и ведут себя как обычные отправленные задачи по истечении задержки. Методы планирования возвращают ForkJoinTasks, реализующие интерфейс ScheduledFuture. Исчерпание ресурсов, возникшее после первоначальной отправки, приводит к отмене задачи. При использовании методов, зависящих от времени, политики завершения работы соответствуют политикам по умолчанию класса ScheduledThreadPoolExecutor: при вызове shutdown() существующие периодические задачи больше не выполняются, а пул завершает работу, когда в нём не остаётся активных задач и завершаются существующие отложенные задачи. Метод cancelDelayedTasksOnShutdown() можно использовать для отключения всех отложенных задач при завершении работы, а метод shutdownNow() — для безусловного инициирования завершения работы пула. Методы мониторинга, такие как getQueuedTaskCount(), не учитывают запланированные задачи, выполнение которых ещё не разрешено; их количество отдельно возвращает метод getDelayedTaskCount().

Параметры, используемые для создания общего пула, можно задавать с помощью следующих системных свойств:

  • java.util.concurrent.ForkJoinPool.common.parallelism — уровень параллелизма, неотрицательное целое число. Использовать не рекомендуется. Вместо этого используйте setParallelism(int).
  • java.util.concurrent.ForkJoinPool.common.threadFactory — имя класса ForkJoinPool.ForkJoinWorkerThreadFactory. Для загрузки этого класса используется системный загрузчик классов.
  • java.util.concurrent.ForkJoinPool.common.exceptionHandler — имя класса Thread.UncaughtExceptionHandler. Для загрузки этого класса используется системный загрузчик классов.
  • java.util.concurrent.ForkJoinPool.common.maximumSpares — максимальное количество дополнительных потоков, которые разрешено поддерживать для достижения целевого уровня параллелизма (по умолчанию 256).
Если фабрика потоков не задана с помощью системного свойства, общий пул использует фабрику, которая в качестве контекстного загрузчика классов потока применяет системный загрузчик классов. При любой ошибке во время установки этих параметров используются значения по умолчанию. Использование потоков можно отключить, применив фабрику, которая может возвращать null; в этом случае некоторые задачи могут никогда не выполниться. Хотя установить для свойства параллелизма значение ноль возможно, настоятельно не рекомендуется этого делать: при наличии задач, по своей природе выполняющихся асинхронно, это значение может быть переопределено внутренними механизмами.
Примечание по реализации:
Эта реализация ограничивает максимальное количество работающих потоков значением 32767. Попытки создать пулы, размер которых превышает этот максимум, приводят к IllegalArgumentException. Кроме того, эта реализация отклоняет отправленные задачи (то есть выбрасывает RejectedExecutionException) только в том случае, если пул завершает работу или исчерпаны внутренние ресурсы.
С версии:
1.7

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

Модификатор и тип Класс Описание
static interface  ForkJoinPool.ForkJoinWorkerThreadFactory
Фабрика для создания новых ForkJoinWorkerThread.
static interface  ForkJoinPool.ManagedBlocker
Интерфейс для расширения управляемого параллелизма задач, выполняющихся в ForkJoinPool.

Краткое описание полей

Модификатор и тип Поле Описание
static final ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory
Создаёт новый ForkJoinWorkerThread.

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

Конструктор Описание
ForkJoinPool()
Создаёт ForkJoinPool с уровнем параллелизма, равным Runtime.availableProcessors(), используя значения по умолчанию для всех остальных параметров (см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).
ForkJoinPool(int parallelism)
Создаёт ForkJoinPool с указанным уровнем параллелизма, используя значения по умолчанию для всех остальных параметров (см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).
ForkJoinPool(int parallelism, ForkJoinPool.ForkJoinWorkerThreadFactory factory, Thread.UncaughtExceptionHandler handler, boolean asyncMode)
Создаёт ForkJoinPool с заданными параметрами (для остальных используются значения по умолчанию — см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).
ForkJoinPool(int parallelism, ForkJoinPool.ForkJoinWorkerThreadFactory factory, Thread.UncaughtExceptionHandler handler, boolean asyncMode, int corePoolSize, int maximumPoolSize, int minimumRunnable, Predicate<? super ForkJoinPool> saturate, long keepAliveTime, TimeUnit unit)
Создаёт ForkJoinPool с заданными параметрами.

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

Модификатор и тип Метод Описание
boolean awaitQuiescence(long timeout, TimeUnit unit)
Если вызван задачей ForkJoinTask, выполняющейся в этом пуле, по эффекту эквивалентен ForkJoinTask.helpQuiesce().
boolean awaitTermination(long timeout, TimeUnit unit)
Блокирует выполнение до тех пор, пока все задачи не завершат выполнение после запроса на завершение работы, не истечёт время ожидания или не будет прерван текущий поток — в зависимости от того, что произойдёт первым.
void cancelDelayedTasksOnShutdown()
Указывает, что запланированные задачи, которые не выполняются и для которых ещё не разрешено выполнение, не будут выполняться и будут отменены при вызове shutdown() (если только этот пул не является commonPool(), который никогда не завершает работу).
void close()
Если это не commonPool(), инициирует штатное завершение работы, при котором ранее отправленные задачи выполняются, новые задачи не принимаются, а метод ожидает завершения всех задач и завершения работы исполнителя.
static ForkJoinPool commonPool()
Возвращает экземпляр общего пула.
protected int drainTasksTo(Collection<? super ForkJoinTask<?>> c)
Удаляет все доступные невыполненные отправленные и forked-задачи из очередей планирования и добавляет их в указанную коллекцию, не изменяя их состояние выполнения.
void execute(Runnable task)
Выполняет указанную команду в некоторый момент в будущем.
void execute(ForkJoinTask<?> task)
Организует (асинхронное) выполнение указанной задачи.
<T> ForkJoinTask<T> externalSubmit(ForkJoinTask<T> task)
Отправляет указанную задачу так, как если бы она была отправлена клиентом, не являющимся ForkJoinTask.
int getActiveThreadCount()
Возвращает оценочное количество потоков, которые в данный момент похищают или выполняют задачи.
boolean getAsyncMode()
Возвращает true, если этот пул использует локальный режим планирования «первым пришёл — первым обслужен» для forked-задач, которые никогда не объединяются.
static int getCommonPoolParallelism()
Возвращает целевой уровень параллелизма общего пула.
long getDelayedTaskCount()
Возвращает оценочное количество отложенных (включая периодические) задач, запланированных в этом пуле, выполнение которых ещё не готово начаться.
ForkJoinPool.ForkJoinWorkerThreadFactory getFactory()
Возвращает фабрику, используемую для создания новых рабочих потоков.
int getParallelism()
Возвращает целевой уровень параллелизма этого пула.
int getPoolSize()
Возвращает количество рабочих потоков, которые были запущены, но ещё не завершились.
int getQueuedSubmissionCount()
Возвращает оценочное количество задач, отправленных в этот пул, выполнение которых ещё не началось.
long getQueuedTaskCount()
Возвращает оценочное общее количество задач, находящихся в очередях рабочих потоков (не включая задачи, отправленные в пул, выполнение которых ещё не началось).
int getRunningThreadCount()
Возвращает оценочное количество рабочих потоков, которые не заблокированы в ожидании объединения задач или другой управляемой синхронизации.
long getStealCount()
Возвращает оценочное общее количество завершённых задач, выполненных потоком, отличным от потока, отправившего их.
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
Возвращает обработчик внутренних рабочих потоков, завершающихся из-за невосстановимых ошибок, возникших во время выполнения задач.
boolean hasQueuedSubmissions()
Возвращает true, если в этом пуле есть задачи, выполнение которых ещё не началось.
<T> T invoke(ForkJoinTask<T> task)
Выполняет указанную задачу и возвращает её результат после завершения.
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
Выполняет указанные задачи и возвращает список объектов Future с их состояниями и результатами после завершения всех задач.
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
Выполняет указанные задачи и возвращает список объектов Future с их состояниями и результатами после завершения всех задач или истечения времени ожидания — в зависимости от того, что произойдёт первым.
<T> List<Future<T>> invokeAllUninterruptibly(Collection<? extends Callable<T>> tasks)
Версия invokeAll, не подверженная прерыванию.
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
Выполняет указанные задачи и возвращает результат одной из них, успешно завершившейся (то есть не выбросившей исключение), если такая есть.
<T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
Выполняет указанные задачи и возвращает результат одной из них, успешно завершившейся (то есть не выбросившей исключение), если такая задача завершится до истечения указанного времени ожидания.
boolean isQuiescent()
Возвращает true, если в данный момент все рабочие потоки простаивают.
boolean isShutdown()
Возвращает true, если работа этого пула завершена.
boolean isTerminated()
Возвращает true, если после завершения работы все задачи выполнены.
boolean isTerminating()
Возвращает true, если процесс завершения работы начался, но ещё не завершён.
<T> ForkJoinTask<T> lazySubmit(ForkJoinTask<T> task)
Отправляет указанную задачу, не гарантируя, что она в конечном итоге будет выполнена при отсутствии доступных активных потоков.
static void managedBlock(ForkJoinPool.ManagedBlocker blocker)
Выполняет указанную задачу, которая может блокироваться.
protected ForkJoinTask<?> pollSubmission()
Удаляет и возвращает следующую невыполненную отправленную задачу, если она доступна.
ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
Отправляет одноразовую задачу, выполнение которой становится доступным после указанной задержки.
<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
Отправляет одноразовую задачу, возвращающую значение, выполнение которой становится доступным после указанной задержки.
ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
Отправляет периодическое действие, первое выполнение которого становится доступным после указанной начальной задержки, а последующие выполняются с указанным периодом; то есть выполнение начнётся после initialDelay, затем после initialDelay + period, затем после initialDelay + 2 * period и так далее.
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
Отправляет периодическое действие, первое выполнение которого становится доступным после указанной начальной задержки, а последующие — с указанной задержкой между завершением одного выполнения и началом следующего.
int setParallelism(int size)
Изменяет целевой уровень параллелизма этого пула, управляя последующим созданием, использованием и завершением рабочих потоков.
void shutdown()
При необходимости инициирует штатное завершение работы, при котором ранее отправленные задачи выполняются, а новые задачи не принимаются.
List<Runnable> shutdownNow()
При необходимости пытается отменить и/или остановить все задачи и отклоняет все последующие отправленные задачи.
ForkJoinTask<?> submit(Runnable task)
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу.
<T> ForkJoinTask<T> submit(Runnable task, T result)
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу.
<T> ForkJoinTask<T> submit(Callable<T> task)
Отправляет на выполнение задачу, возвращающую значение, и возвращает Future, представляющий ожидаемые результаты задачи.
<T> ForkJoinTask<T> submit(ForkJoinTask<T> task)
Отправляет ForkJoinTask на выполнение.
<V> ForkJoinTask<V> submitWithTimeout(Callable<V> callable, long timeout, TimeUnit unit, Consumer<? super ForkJoinTask<V>> timeoutAction)
Отправляет задачу, выполняющую указанную функцию, и отменяет её или выполняет указанное действие timeoutAction, если задача не завершится в течение заданного времени ожидания.
String toString()
Возвращает строку, идентифицирующую этот пул и описывающую его состояние, включая сведения о состоянии выполнения, уровне параллелизма, а также количестве рабочих потоков и задач.

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

invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor

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

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

Подробное описание полей

defaultForkJoinWorkerThreadFactory

public static final ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory
Создаёт новый ForkJoinWorkerThread. Эта фабрика используется, если её не переопределить в конструкторах ForkJoinPool.

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

ForkJoinPool

public ForkJoinPool()
Создаёт ForkJoinPool с параллелизмом, равным Runtime.availableProcessors(), и значениями по умолчанию для всех остальных параметров (см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

ForkJoinPool

public ForkJoinPool(int parallelism)
Создаёт ForkJoinPool с указанным уровнем параллелизма и значениями по умолчанию для всех остальных параметров (см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).
Параметры:
parallelism — уровень параллелизма
Исключения:
IllegalArgumentException — если параллелизм меньше или равен нулю либо превышает ограничение реализации

ForkJoinPool

public ForkJoinPool(int parallelism, ForkJoinPool.ForkJoinWorkerThreadFactory factory, Thread.UncaughtExceptionHandler handler, boolean asyncMode)
Создаёт ForkJoinPool с указанными параметрами (для остальных используются значения по умолчанию — см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).
Параметры:
parallelism — уровень параллелизма. Чтобы использовать значение по умолчанию, укажите Runtime.availableProcessors().
factory — фабрика для создания новых потоков. Чтобы использовать значение по умолчанию, укажите defaultForkJoinWorkerThreadFactory.
handler — обработчик внутренних рабочих потоков, которые завершаются из-за неисправимых ошибок, возникших при выполнении задач. Чтобы использовать значение по умолчанию, укажите null.
asyncMode — если значение равно true, для разделённых задач, к которым никогда не присоединяются, устанавливается локальный режим планирования FIFO. Этот режим может быть предпочтительнее режима по умолчанию на основе локального стека в приложениях, где рабочие потоки обрабатывают только асинхронные задачи, связанные с событиями. Чтобы использовать значение по умолчанию, укажите false.
Исключения:
IllegalArgumentException — если параллелизм меньше или равен нулю либо превышает ограничение реализации
NullPointerException — если фабрика равна null

ForkJoinPool

public ForkJoinPool(int parallelism, ForkJoinPool.ForkJoinWorkerThreadFactory factory, Thread.UncaughtExceptionHandler handler, boolean asyncMode, int corePoolSize, int maximumPoolSize, int minimumRunnable, Predicate<? super ForkJoinPool> saturate, long keepAliveTime, TimeUnit unit)
Создаёт ForkJoinPool с указанными параметрами.
Параметры:
parallelism — уровень параллелизма. Чтобы использовать значение по умолчанию, укажите Runtime.availableProcessors().
factory — фабрика для создания новых потоков. Чтобы использовать значение по умолчанию, укажите defaultForkJoinWorkerThreadFactory.
handler — обработчик внутренних рабочих потоков, которые завершаются из-за неисправимых ошибок, возникших при выполнении задач. Чтобы использовать значение по умолчанию, укажите null.
asyncMode — если значение равно true, для разделённых задач, к которым никогда не присоединяются, устанавливается локальный режим планирования FIFO. Этот режим может быть предпочтительнее режима по умолчанию на основе локального стека в приложениях, где рабочие потоки обрабатывают только асинхронные задачи, связанные с событиями. Чтобы использовать значение по умолчанию, укажите false.
corePoolSize — игнорируется: использовался в предыдущих выпусках этого класса, но больше не применяется. Использование 0 обеспечивает совместимость между выпусками.
maximumPoolSize — максимально допустимое количество потоков. При достижении максимума попытки заменить заблокированные потоки завершаются неудачей. (Однако из-за того, что создание и завершение разных потоков могут происходить одновременно и управляться указанной фабрикой потоков, это значение может временно превышаться.) Чтобы задать то же значение, которое используется по умолчанию для общего пула, укажите 256 плюс уровень parallelism. (По умолчанию общий пул допускает не более 256 резервных потоков.) Значение (например, Integer.MAX_VALUE), превышающее общий лимит потоков реализации, действует так же, как этот лимит (используемый по умолчанию).
minimumRunnable — минимально допустимое количество основных потоков, не заблокированных вызовом join или ForkJoinPool.ManagedBlocker. Для обеспечения прогресса, когда недостаточно незаблокированных потоков и могут существовать невыполненные задачи, создаются новые потоки — до указанного значения maximumPoolSize. Чтобы использовать значение по умолчанию, обеспечивающее живучесть, укажите 1. Большее значение может повысить пропускную способность при наличии заблокированных операций, но может и не повысить её из-за увеличения накладных расходов. Значение 0 может быть приемлемым, если у отправленных задач нет зависимостей, требующих дополнительных потоков.
saturate — если не равно null, предикат, вызываемый при попытках создать потоки сверх максимально допустимого общего количества. По умолчанию, если поток собирается заблокироваться при вызове join или ForkJoinPool.ManagedBlocker, но его нельзя заменить, так как это приведёт к превышению maximumPoolSize, выбрасывается исключение RejectedExecutionException. Однако, если этот предикат возвращает true, исключение не выбрасывается, и пул продолжает работу с количеством выполняемых потоков меньше целевого, что может не обеспечить прогресс.
keepAliveTime — время с момента последнего использования, по истечении которого поток завершается (а затем при необходимости заменяется). Чтобы использовать значение по умолчанию, укажите 60, TimeUnit.SECONDS.
unit — единица времени для аргумента keepAliveTime
Исключения:
IllegalArgumentException — если параллелизм меньше или равен нулю либо превышает ограничение реализации, если maximumPoolSize меньше параллелизма или если keepAliveTime меньше или равен нулю.
NullPointerException — если фабрика равна null
Начиная с:
9

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

commonPool

public static ForkJoinPool commonPool()
Возвращает экземпляр общего пула. Этот пул создаётся статически; попытки вызвать shutdown() или shutdownNow() не влияют на его состояние выполнения. Однако этот пул и все выполняющиеся в нём операции автоматически завершаются при вызове System.exit(int) программы. Любая программа, которой для завершения до выхода требуется обработка асинхронных задач, должна перед выходом вызвать commonPool().awaitQuiescence.
Возвращает:
экземпляр общего пула
Начиная с:
1.8

invoke

public <T> T invoke(ForkJoinTask<T> task)
Выполняет указанную задачу и возвращает её результат после завершения. Если при вычислении возникает непроверяемое исключение или ошибка, они повторно выбрасываются как результат этого вызова. Повторно выброшенные исключения ведут себя так же, как обычные исключения, но по возможности содержат трассировки стека (например, отображаемые с помощью ex.printStackTrace()) как текущего потока, так и потока, в котором фактически возникло исключение; как минимум содержится трассировка последнего.
Параметры типа:
T — тип результата задачи
Параметры:
task — задача
Возвращает:
результат задачи
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения

execute

public void execute(ForkJoinTask<?> task)
Организует (асинхронное) выполнение указанной задачи.
Параметры:
task — задача
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения

execute

public void execute(Runnable task)
Описание скопировано из интерфейса: Executor
Выполняет указанную команду в некоторый момент в будущем. Команда может выполняться в новом потоке, в потоке из пула или в вызывающем потоке — на усмотрение реализации Executor.
Определено в:
execute в интерфейсе Executor
Параметры:
task — задача Runnable
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения

submit

public <T> ForkJoinTask<T> submit(ForkJoinTask<T> task)
Отправляет ForkJoinTask на выполнение.
Требования к реализации:
Этот метод эквивалентен externalSubmit(ForkJoinTask), если вызывается из потока, не принадлежащего этому пулу.
Параметры типа:
T — тип результата задачи
Параметры:
task — отправляемая задача
Возвращает:
задачу
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения

submit

public <T> ForkJoinTask<T> submit(Callable<T> task)
Описание скопировано из интерфейса: ExecutorService
Отправляет на выполнение задачу, возвращающую значение, и возвращает Future, представляющий ожидающий результат задачи. Метод get объекта Future вернёт результат задачи после успешного завершения.

Если вы хотите сразу заблокировать выполнение в ожидании задачи, можно использовать конструкции вида result = exec.submit(aCallable).get();

Примечание: класс Executors содержит набор методов, преобразующих некоторые другие распространённые объекты, подобные замыканиям, например PrivilegedAction, в форму Callable, чтобы их можно было отправить на выполнение.

Определено в:
submit в интерфейсе ExecutorService
Переопределяет:
submit в классе AbstractExecutorService
Параметры типа:
T — тип результата задачи
Параметры:
task — отправляемая задача
Возвращает:
Future, представляющий ожидающее завершение задачи
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения

submit

public <T> ForkJoinTask<T> submit(Runnable task, T result)
Описание скопировано из интерфейса: ExecutorService
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу. Метод get объекта Future вернёт указанный результат после успешного завершения.
Определено в:
submit в интерфейсе ExecutorService
Переопределяет:
submit в классе AbstractExecutorService
Параметры типа:
T — тип результата
Параметры:
task — отправляемая задача
result — возвращаемый результат
Возвращает:
Future, представляющий ожидающее завершение задачи
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения

submit

public ForkJoinTask<?> submit(Runnable task)
Описание скопировано из интерфейса: ExecutorService
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу. Метод get объекта Future вернёт null после успешного завершения.
Определено в:
submit в интерфейсе ExecutorService
Переопределяет:
submit в классе AbstractExecutorService
Параметры:
task — отправляемая задача
Возвращает:
Future, представляющий ожидающее завершение задачи
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения

externalSubmit

public <T> ForkJoinTask<T> externalSubmit(ForkJoinTask<T> task)
Отправляет указанную задачу, как если бы её отправил внешний клиент, не являющийся ForkJoinTask. Задача добавляется в очередь планирования для отправленных задач пула, даже если вызов выполнен из потока этого пула.
Требования к реализации:
Этот метод эквивалентен submit(ForkJoinTask), если вызывается из потока, не принадлежащего этому пулу.
Параметры типа:
T — тип результата задачи
Параметры:
task — отправляемая задача
Возвращает:
задачу
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения
Начиная с:
20

lazySubmit

public <T> ForkJoinTask<T> lazySubmit(ForkJoinTask<T> task)
Отправляет указанную задачу, не гарантируя, что она в конечном итоге будет выполнена при отсутствии доступных активных потоков. В некоторых контекстах этот метод может уменьшить конкуренцию и накладные расходы, поскольку позволяет полагаться на контекстно-зависимые сведения о том, что существующие потоки (возможно, включая вызывающий поток, если он работает в этом пуле) в конечном итоге станут доступны для выполнения задачи.
Параметры типа:
T — тип результата задачи
Параметры:
task — задача
Возвращает:
задачу
Исключения:
NullPointerException — если задача равна null
RejectedExecutionException — если задачу невозможно запланировать для выполнения
Начиная с:
19

setParallelism

public int setParallelism(int size)
Изменяет целевой уровень параллелизма этого пула, управляя будущим созданием, использованием и завершением рабочих потоков. Этот метод может быть полезен в контекстах, где количество доступных процессоров меняется со временем.
Примечание к реализации:
Эта реализация ограничивает максимальное количество работающих потоков значением 32767
Параметры:
size — целевой уровень параллелизма
Возвращает:
предыдущий уровень параллелизма.
Исключения:
IllegalArgumentException — если размер меньше 1 или превышает максимум, поддерживаемый этим пулом.
UnsupportedOperationException — этот пул является commonPool(), а уровень параллелизма задан системным свойством java.util.concurrent.ForkJoinPool.common.parallelism.
Начиная с:
19

invokeAllUninterruptibly

public <T> List<Future<T>> invokeAllUninterruptibly(Collection<? extends Callable<T>> tasks)
Версия invokeAll, не прерываемая прерываниями. Выполняет указанные задачи и возвращает список объектов Future с их состояниями и результатами после завершения всех задач, игнорируя прерывания. Для каждого элемента возвращённого списка значение Future.isDone() равно true. Обратите внимание: завершённая задача могла завершиться как нормально, так и с выбросом исключения. Результаты этого метода не определены, если указанная коллекция изменяется во время выполнения операции.
Примечание к API:
Этот метод поддерживает сценарии использования, которые ранее полагались на несовместимое переопределение ExecutorService.invokeAll(java.util.Collection).
Параметры типа:
T — тип значений, возвращаемых задачами
Параметры:
tasks — коллекция задач
Возвращает:
список объектов Future, представляющих задачи, в том же последовательном порядке, что и итератор указанного списка задач; все задачи в списке завершены
Исключения:
NullPointerException — если задачи или любой из их элементов равны null
RejectedExecutionException — если какую-либо задачу невозможно запланировать для выполнения
Начиная с:
22

invokeAll

public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException
Описание скопировано из интерфейса: ExecutorService
Выполняет указанные задачи и возвращает список объектов Future с их состояниями и результатами после завершения всех задач. Для каждого элемента возвращённого списка значение Future.isDone() равно true. Обратите внимание: завершённая задача могла завершиться как нормально, так и с выбросом исключения. Результаты этого метода не определены, если указанная коллекция изменяется во время выполнения операции.
Определено в:
invokeAll в интерфейсе ExecutorService
Переопределяет:
invokeAll в классе AbstractExecutorService
Параметры типа:
T — тип значений, возвращаемых задачами
Параметры:
tasks — коллекция задач
Возвращает:
список объектов Future, представляющих задачи, в том же последовательном порядке, что и итератор указанного списка задач; все задачи в списке завершены
Исключения:
InterruptedException — если во время ожидания произошло прерывание; в этом случае незавершённые задачи отменяются

invokeAll

public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException
Описание скопировано из интерфейса: ExecutorService
Выполняет указанные задачи и возвращает список объектов Future с их состояниями и результатами после завершения всех задач или истечения времени ожидания — в зависимости от того, что наступит раньше. Для каждого элемента возвращённого списка значение Future.isDone() равно true. При возврате незавершённые задачи отменяются. Обратите внимание: завершённая задача могла завершиться как нормально, так и с выбросом исключения. Результаты этого метода не определены, если указанная коллекция изменяется во время выполнения операции.
Определено в:
invokeAll в интерфейсе ExecutorService
Переопределяет:
invokeAll в классе AbstractExecutorService
Параметры типа:
T — тип значений, возвращаемых задачами
Параметры:
tasks — коллекция задач
timeout — максимальное время ожидания
unit — единица времени для аргумента времени ожидания
Возвращает:
список объектов Future, представляющих задачи, в том же последовательном порядке, что и итератор указанного списка задач. Если время ожидания не истекло, все задачи будут завершены. Если оно истекло, некоторые задачи не будут завершены.
Исключения:
InterruptedException — если во время ожидания произошло прерывание; в этом случае незавершённые задачи отменяются

invokeAny

public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException
Описание скопировано из интерфейса: ExecutorService
Выполняет указанные задачи и возвращает результат одной из них, успешно завершившейся (то есть без выброса исключения), если такая есть. При нормальном или исключительном возврате незавершённые задачи отменяются. Результаты этого метода не определены, если указанная коллекция изменяется во время выполнения операции.
Определено в:
invokeAny в интерфейсе ExecutorService
Переопределяет:
invokeAny в классе AbstractExecutorService
Параметры типа:
T — тип значений, возвращаемых задачами
Параметры:
tasks — коллекция задач
Возвращает:
результат, возвращённый одной из задач
Исключения:
InterruptedException — если во время ожидания произошло прерывание
ExecutionException — если ни одна задача не завершилась успешно

invokeAny

public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
Описание скопировано из интерфейса: ExecutorService
Выполняет указанные задачи и возвращает результат одной из них, успешно завершившейся (то есть без выброса исключения), если такая задача есть до истечения указанного времени ожидания. При нормальном или исключительном возврате незавершённые задачи отменяются. Результаты этого метода не определены, если указанная коллекция изменяется во время выполнения операции.
Определено в:
invokeAny в интерфейсе ExecutorService
Переопределяет:
invokeAny в классе AbstractExecutorService
Параметры типа:
T — тип значений, возвращаемых задачами
Параметры:
tasks — коллекция задач
timeout — максимальное время ожидания
unit — единица времени для аргумента времени ожидания
Возвращает:
результат, возвращённый одной из задач
Исключения:
InterruptedException — если во время ожидания произошло прерывание
ExecutionException — если ни одна задача не завершилась успешно
TimeoutException — если указанное время ожидания истекло до успешного завершения какой-либо задачи

schedule

public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
Отправляет одноразовую задачу, которая становится доступной для выполнения по истечении указанной задержки. После этого она будет выполнена, если её явно не отменить; при исчерпании ресурсов её выполнение не удастся (и в конечном итоге будет сообщено об отмене); также задача не выполнится, если пул находится в состоянии shutdownNow() или если пул находится в состоянии shutdown(), в противном случае неактивен и действует параметр cancelDelayedTasksOnShutdown().
Определено в:
schedule в интерфейсе ScheduledExecutorService
Параметры:
command — выполняемая задача
delay — задержка выполнения относительно текущего момента
unit — единица времени для параметра задержки
Возвращает:
ForkJoinTask, реализующий интерфейс ScheduledFuture; его метод get() вернёт null при нормальном завершении.
Исключения:
RejectedExecutionException — если пул остановлен или при отправке задачи исчерпаны ресурсы.
NullPointerException — если команда или единица измерения равна null
Начиная с:
25

schedule

public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
Отправляет одноразовую задачу, возвращающую значение и становящуюся доступной для выполнения по истечении указанной задержки. После этого она будет выполнена, если её явно не отменить; при исчерпании ресурсов её выполнение не удастся (и в конечном итоге будет сообщено об отмене); также задача не выполнится, если пул находится в состоянии shutdownNow() или если пул находится в состоянии shutdown(), в противном случае неактивен и действует параметр cancelDelayedTasksOnShutdown().
Определено в:
schedule в интерфейсе ScheduledExecutorService
Параметры типа:
V — тип результата Callable
Параметры:
callable — выполняемая функция
delay — задержка выполнения относительно текущего момента
unit — единица времени для параметра задержки
Возвращает:
ForkJoinTask, реализующий интерфейс ScheduledFuture; его метод get() вернёт значение, возвращённое Callable, при нормальном завершении.
Исключения:
RejectedExecutionException — если пул остановлен или при отправке задачи исчерпаны ресурсы.
NullPointerException — если команда или единица измерения равна null
Начиная с:
25

scheduleAtFixedRate

public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
Отправляет периодическое действие, которое впервые становится доступным для выполнения после указанной начальной задержки, а затем — с указанным периодом; то есть выполнения начнутся после initialDelay, затем initialDelay + period, затем initialDelay + 2 * period и так далее.

Последовательность выполнений задачи продолжается бесконечно, пока не произойдёт одно из следующих исключительных завершений:

  • Задача явно отменена
  • Вызван метод shutdownNow()
  • Вызван метод shutdown(), и пул находится в состоянии покоя; в этом случае уже начавшиеся выполнения продолжаются, но последующие выполнения не запускаются.
  • Во время выполнения или в самой задаче возникает нехватка ресурсов.
  • При выполнении задачи возникает исключение. В этом случае вызов метода get у возвращённого future приведёт к выбросу ExecutionException, содержащего это исключение в качестве причины.
Последующие выполнения не запускаются. Последующие вызовы isDone() у возвращённого future будут возвращать true.

Если выполнение этой задачи длится дольше её периода, последующие выполнения могут начаться с опозданием, но не будут выполняться параллельно.

Определено в:
scheduleAtFixedRate в интерфейсе ScheduledExecutorService
Параметры:
command - задача для выполнения
initialDelay - время задержки перед первым выполнением
period - период между последовательными выполнениями
unit - единица измерения параметров initialDelay и period
Возвращает:
ForkJoinTask, реализующий интерфейс ScheduledFuture. Метод get() у future никогда не вернётся нормально и выбросит исключение при отмене задачи или ненормальном завершении её выполнения.
Выбрасывает:
RejectedExecutionException - если пул остановлен или при отправке задачи возникает нехватка ресурсов.
NullPointerException - если command или unit равен null
IllegalArgumentException - если period меньше или равен нулю
Начиная с:
25

scheduleWithFixedDelay

public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
Отправляет периодическое действие, которое впервые становится доступным для выполнения после указанной начальной задержки, а затем — с указанной задержкой между завершением одного выполнения и началом следующего.

Последовательность выполнений задачи продолжается бесконечно, пока не произойдёт одно из следующих исключительных завершений:

  • Задача явно отменена
  • Вызван метод shutdownNow()
  • Вызван метод shutdown(), и пул находится в состоянии покоя; в этом случае уже начавшиеся выполнения продолжаются, но последующие выполнения не запускаются.
  • Во время выполнения или в самой задаче возникает нехватка ресурсов.
  • При выполнении задачи возникает исключение. В этом случае вызов метода get у возвращённого future приведёт к выбросу ExecutionException, содержащего это исключение в качестве причины.
Последующие выполнения не запускаются. Последующие вызовы isDone() у возвращённого future будут возвращать true.
Определено в:
scheduleWithFixedDelay в интерфейсе ScheduledExecutorService
Параметры:
command - задача для выполнения
initialDelay - время задержки перед первым выполнением
delay - задержка между завершением одного выполнения и началом следующего
unit - единица измерения параметров initialDelay и delay
Возвращает:
ForkJoinTask, реализующий интерфейс ScheduledFuture. Метод get() у future никогда не вернётся нормально и выбросит исключение при отмене задачи или ненормальном завершении её выполнения.
Выбрасывает:
RejectedExecutionException - если пул остановлен или при отправке задачи возникает нехватка ресурсов.
NullPointerException - если command или unit равен null
IllegalArgumentException - если delay меньше или равен нулю
Начиная с:
25

submitWithTimeout

public <V> ForkJoinTask<V> submitWithTimeout(Callable<V> callable, long timeout, TimeUnit unit, Consumer<? super ForkJoinTask<V>> timeoutAction)
Отправляет задачу, выполняющую заданную функцию, и отменяет её либо выполняет заданное действие timeoutAction, если задача не завершена в течение указанного периода ожидания. Если необязательный параметр timeoutAction равен null, задача отменяется (с помощью cancel(true)). В противном случае выполняется это действие, и выполняющаяся задача может быть прервана. Действие может включать вызов ForkJoinTask.complete(V) для задания замещающего значения или ForkJoinTask.completeExceptionally(Throwable) для выброса соответствующего исключения. Обратите внимание, что эти вызовы могут завершиться успешно, только если задача ещё не завершилась к моменту выполнения timeoutAction.
Параметры типа:
V - тип результата callable
Параметры:
callable - функция для выполнения
timeout - время ожидания перед отменой, если задача не завершена
unit - единица измерения параметра timeout
timeoutAction - если не равен null, действие при истечении времени ожидания; в противном случае по умолчанию выполняется отмена с помощью cancel(true).
Возвращает:
Future, который можно использовать для получения результата или отмены задачи
Выбрасывает:
RejectedExecutionException - если не удаётся запланировать выполнение задачи
NullPointerException - если callable или unit равен null
Начиная с:
25

cancelDelayedTasksOnShutdown

public void cancelDelayedTasksOnShutdown()
Настраивает пул так, чтобы запланированные задачи, которые не выполняются и для которых ещё не наступило время выполнения, не выполнялись и отменялись при вызове shutdown() (если только этот пул не является commonPool(), который никогда не останавливается). Этот метод можно вызвать до shutdown(), чтобы настройка вступила в силу при следующем вызове, либо после него, чтобы отменить такие задачи, что может позволить пулу завершить работу. Обратите внимание, что при остановке последующие выполнения периодических задач всегда отключаются, поэтому этот метод имеет смысл только для непериодических задач.
Начиная с:
25

getFactory

public ForkJoinPool.ForkJoinWorkerThreadFactory getFactory()
Возвращает фабрику, используемую для создания новых рабочих потоков.
Возвращает:
фабрику, используемую для создания новых рабочих потоков

getUncaughtExceptionHandler

public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
Возвращает обработчик для внутренних рабочих потоков, которые завершаются из-за неисправимых ошибок, возникших при выполнении задач.
Возвращает:
обработчик или null, если его нет

getParallelism

public int getParallelism()
Возвращает целевой уровень параллелизма этого пула.
Возвращает:
целевой уровень параллелизма этого пула

getCommonPoolParallelism

public static int getCommonPoolParallelism()
Возвращает целевой уровень параллелизма общего пула.
Возвращает:
целевой уровень параллелизма общего пула
Начиная с:
1.8

getPoolSize

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

getAsyncMode

public boolean getAsyncMode()
Возвращает true, если этот пул использует локальный режим планирования «первым пришёл — первым обслужен» для разветвлённых задач, которые никогда не объединяются.
Возвращает:
true, если этот пул использует асинхронный режим

getRunningThreadCount

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

getActiveThreadCount

public int getActiveThreadCount()
Возвращает оценку количества потоков, которые в данный момент перехватывают или выполняют задачи. Этот метод может завышать количество активных потоков.
Возвращает:
количество активных потоков

isQuiescent

public boolean isQuiescent()
Возвращает true, если все рабочие потоки в данный момент бездействуют. Бездействующий рабочий поток — это поток, который не может получить задачу для выполнения, поскольку в очередях нет задач для перехвата другими потоками и в пуле нет ожидающих отправки задач. Этот метод возвращает консервативный результат: он может не вернуть true сразу после того, как все потоки перейдут в состояние бездействия, но со временем вернёт его, если потоки останутся неактивными.
Возвращает:
true, если все потоки в данный момент бездействуют

getStealCount

public long getStealCount()
Возвращает оценку общего количества завершённых задач, выполненных потоком, отличным от потока, который отправил задачу. Если пул не находится в состоянии покоя, возвращаемое значение занижает фактическое общее количество перехватов. Это значение может быть полезно для мониторинга и настройки программ, использующих fork/join: в целом количество перехватов должно быть достаточно высоким, чтобы потоки были заняты, но достаточно низким, чтобы избежать накладных расходов и конкуренции между потоками.
Возвращает:
количество перехватов

getQueuedTaskCount

public long getQueuedTaskCount()
Возвращает оценку общего количества задач, которые в данный момент находятся в очередях рабочих потоков (не включая задачи, отправленные в пул, но ещё не начавшие выполняться). Это значение является приблизительным и вычисляется путём перебора всех потоков пула. Этот метод может быть полезен для настройки размера задач. Возвращаемое количество не включает запланированные задачи, которые ещё не готовы к выполнению; их количество отдельно возвращает метод getDelayedTaskCount().
Возвращает:
количество задач в очередях
См. также:
  • ForkJoinWorkerThread.getQueuedTaskCount()

getQueuedSubmissionCount

public int getQueuedSubmissionCount()
Возвращает оценку количества задач, отправленных в этот пул, но ещё не начавших выполняться. Время выполнения этого метода может быть пропорционально количеству отправленных задач.
Возвращает:
количество отправленных задач в очереди

getDelayedTaskCount

public long getDelayedTaskCount()
Возвращает оценку количества отложенных (включая периодические) задач, запланированных в этом пуле, которые ещё не готовы к отправке на выполнение. Возвращаемое значение неточно, пока выполняется обработка отложенных задач.
Возвращает:
оценку количества отложенных задач
Начиная с:
25

hasQueuedSubmissions

public boolean hasQueuedSubmissions()
Возвращает true, если в этот пул были отправлены задачи, которые ещё не начали выполняться.
Возвращает:
true, если в очереди есть отправленные задачи

pollSubmission

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

drainTasksTo

protected int drainTasksTo(Collection<? super ForkJoinTask<?>> c)
Удаляет все доступные ещё не выполненные отправленные и разветвлённые задачи из очередей планирования и добавляет их в заданную коллекцию, не изменяя их состояние выполнения. Среди них могут быть искусственно созданные или обёрнутые задачи. Этот метод предназначен для вызова только тогда, когда известно, что пул находится в состоянии покоя. Вызовы в другое время могут не удалить все задачи. Сбой при попытке добавить элементы в коллекцию c может привести к тому, что при выбросе соответствующего исключения элементы не будут находиться ни в одной из коллекций, будут находиться в одной из них или в обеих. Поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции.
Параметры:
c - коллекция, в которую переносятся элементы
Возвращает:
количество перенесённых элементов

toString

public String toString()
Возвращает строку, идентифицирующую этот пул и его состояние, включая сведения о состоянии выполнения, уровне параллелизма, а также количестве рабочих потоков и задач.
Переопределяет:
toString в классе Object
Возвращает:
строку, идентифицирующую этот пул и его состояние

shutdown

public void shutdown()
При необходимости начинает штатное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи не принимаются. Вызов не влияет на состояние выполнения, если это commonPool(), и не оказывает дополнительного эффекта, если пул уже остановлен. Задачи, отправка которых происходит одновременно с выполнением этого метода, могут быть отклонены или приняты.
Определено в:
shutdown в интерфейсе ExecutorService

shutdownNow

public List<Runnable> shutdownNow()
При необходимости пытается отменить и/или остановить все задачи и отклонять все последующие отправленные задачи. Вызов не влияет на состояние выполнения, если это commonPool(), и не оказывает дополнительного эффекта, если пул уже остановлен. В противном случае задачи, отправка или выполнение которых происходит одновременно с выполнением этого метода, могут быть отклонены или приняты. Этот метод отменяет как уже выполняющиеся, так и ещё не выполненные задачи, чтобы обеспечить завершение работы при наличии зависимостей между задачами. Поэтому метод всегда возвращает пустой список (в отличие от поведения некоторых других Executors).
Определено в:
shutdownNow в интерфейсе ExecutorService
Возвращает:
пустой список

isTerminated

public boolean isTerminated()
Возвращает true, если после остановки все задачи завершились.
Определено в:
isTerminated в интерфейсе ExecutorService
Возвращает:
true, если после остановки все задачи завершились

isTerminating

public boolean isTerminating()
Возвращает true, если процесс завершения работы начался, но ещё не закончился. Этот метод может быть полезен для отладки. Если через достаточно длительное время после остановки метод возвращает true, это может указывать на то, что отправленные задачи игнорируют или подавляют прерывание либо ожидают ввода-вывода, из-за чего этот исполнитель не может корректно завершить работу. (См. рекомендации в документации класса ForkJoinTask, согласно которым задачи обычно не должны выполнять блокирующие операции. Если же они это делают, то должны прерывать их при получении сигнала прерывания.)
Возвращает:
true, если завершение работы началось, но ещё не закончилось

isShutdown

public boolean isShutdown()
Возвращает true, если работа этого пула остановлена.
Определено в:
isShutdown в интерфейсе ExecutorService
Возвращает:
true, если работа этого пула остановлена

awaitTermination

public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
Блокирует выполнение до тех пор, пока после запроса на остановку не завершатся все задачи, не истечёт время ожидания или не будет прерван текущий поток — в зависимости от того, что произойдёт раньше. Поскольку commonPool() не завершается до остановки программы, при вызове для общего пула этот метод эквивалентен awaitQuiescence(long, TimeUnit), но всегда возвращает false.
Определено в:
awaitTermination в интерфейсе ExecutorService
Параметры:
timeout - максимальное время ожидания
unit - единица измерения аргумента timeout
Возвращает:
true, если работа этого исполнителя завершилась, и false, если время ожидания истекло до завершения работы
Выбрасывает:
InterruptedException - если во время ожидания произошло прерывание

awaitQuiescence

public boolean awaitQuiescence(long timeout, TimeUnit unit)
Если метод вызван из ForkJoinTask, выполняющейся в этом пуле, его действие эквивалентно действию ForkJoinTask.helpQuiesce(). В противном случае метод ожидает и/или пытается помочь с выполнением задач, пока этот пул не isQuiescent() или не истечёт указанный период ожидания.
Параметры:
timeout - максимальное время ожидания
unit - единица измерения аргумента timeout
Возвращает:
true, если пул находится в состоянии покоя; false, если время ожидания истекло.

close

public void close()
Если это не commonPool(), начинает штатное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи не принимаются, и ожидает завершения всех задач и остановки исполнителя.

Если работа уже завершена или это commonPool(), метод не влияет на выполнение и не ждёт завершения. В противном случае, если во время ожидания возникает прерывание, метод останавливает все выполняющиеся задачи, как если бы был вызван shutdownNow(). Затем он продолжает ожидание до завершения всех активно выполняющихся задач. Задачи, ожидавшие выполнения, не запускаются. Перед возвратом из метода статус прерывания будет восстановлен.

Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе ExecutorService
Начиная с:
19

managedBlock

public static void managedBlock(ForkJoinPool.ManagedBlocker blocker) throws InterruptedException
Запускает заданную задачу, которая может блокироваться. При выполнении в ForkJoinPool этот метод при необходимости может активировать резервный поток, чтобы обеспечить достаточный параллелизм, пока текущий поток заблокирован в blocker.block().

Метод повторно вызывает blocker.isReleasable() и blocker.block(), пока один из методов не вернёт true. Каждому вызову blocker.block() предшествует вызов blocker.isReleasable(), вернувший false.

Если выполнение происходит не в ForkJoinPool, поведение этого метода эквивалентно следующему:

while (!blocker.isReleasable())
  if (blocker.block())
    break;
Если выполнение происходит в ForkJoinPool, пул может быть предварительно расширен, чтобы обеспечить достаточный параллелизм во время вызова blocker.block().
Параметры:
blocker - блокирующая задача
Выбрасывает:
InterruptedException - если это сделал blocker.block()

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

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/ForkJoinPool.html

Spec-Zone.ru

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