Spec-Zone.ru › OpenJDK 17

Класс ForkJoinPool

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

A ForkJoinPool отличается от других типов ExecutorService в основном благодаря использованию кражи задач: все потоки в пуле пытаются найти и выполнить задачи, отправленные в пул и/или созданные другими активными задачами (в конечном итоге блокируются, ожидая работы, если её нет). Это обеспечивает эффективную обработку, когда большинство задач порождают другие подзадачи (как и большинство ForkJoinTasks), а также когда во множество мелких задач отправляются в пул из внешних клиентов. Особенно при установке asyncMode в true в конструкторах, ForkJoinPools также могут быть подходящими для использования с задачами в стиле событий, которые никогда не присоединяются. Все рабочие потоки инициализируются с 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)

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

  • java.util.concurrent.ForkJoinPool.common.parallelism - уровень параллелизма, неотрицательное целое число
  • java.util.concurrent.ForkJoinPool.common.threadFactory - имя класса ForkJoinPool.ForkJoinWorkerThreadFactory. Загрузчик классов системы используется для загрузки этого класса.
  • java.util.concurrent.ForkJoinPool.common.exceptionHandler - имя класса Thread.UncaughtExceptionHandler. Загрузчик классов системы используется для загрузки этого класса.
  • java.util.concurrent.ForkJoinPool.common.maximumSpares - максимальное количество разрешенных дополнительных потоков для поддержания целевого уровня параллелизма (по умолчанию 256).
Если фабрика потоков не предоставлена через системное свойство, то общий пул использует фабрику, использующую системный загрузчик классов в качестве загрузчика класса контекста потока. Кроме того, если присутствует SecurityManager, то общий пул использует фабрику, предоставляющую потоки без включенных Permissions. При любой ошибке при установке этих настроек используются параметры по умолчанию. Можно отключить или ограничить использование потоков в общем пуле, установив свойство параллелизма в ноль и/или используя фабрику, которая может возвращать null. Однако это может привести к тому, что не присоединённые задачи никогда не будут выполнены.

Примечания к реализации: Эта реализация ограничивает максимальное количество запущенных потоков до 32767. Попытки создать пулы с большим количеством потоков, чем максимальное, приводят к IllegalArgumentException.

Эта реализация отклоняет отправленные задачи (то есть, выбрасывая RejectedExecutionException) только при закрытии пула или исчерпании внутренних ресурсов.

С:
1.7
END_OF_DOCUMENT_MARKER

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

Модификатор и тип Класс Описание
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)
Ожидает завершения всех задач после запроса остановки или истечения таймаута или прерывания текущей нити, что произойдет раньше.
static ForkJoinPool commonPool()
Возвращает экземпляр общего пула.
protected int drainTasksTo(Collection<? super ForkJoinTask<?>> c)
Удаляет все доступные невыполненные переданные и разветвлённые задачи из очередей планирования и добавляет их в заданный набор, не изменяя их статус выполнения.
void execute(Runnable task)
Выполняет заданный командный объект в какой-то момент в будущем.
void execute(ForkJoinTask<?> task)
Организует (асинхронное) выполнение заданной задачи.
int getActiveThreadCount()
Возвращает оценку количества нитей, которые в данный момент крадут или выполняют задачи.
boolean getAsyncMode()
Возвращает true если этот пул использует локальный режим планирования FIFO для разветвлённых задач, которые никогда не объединяются.
static int getCommonPoolParallelism()
Возвращает целевой уровень параллелизма общего пула.
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, содержащих их состояние и результаты, когда все завершатся.
boolean isQuiescent()
Возвращает true если все рабочие нити в данный момент бездействуют.
boolean isShutdown()
Возвращает true если этот пул был остановлен.
boolean isTerminated()
Возвращает true если все задачи завершены после остановки.
boolean isTerminating()
Возвращает true если процесс завершения начался, но ещё не завершился.
static void managedBlock(ForkJoinPool.ManagedBlocker blocker)
Выполняет заданную, возможно блокирующую задачу.
protected ForkJoinTask<?> pollSubmission()
Удаляет и возвращает следующую невыполненную задачу, если она доступна.
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 для выполнения.
String toString()
Возвращает строку, идентифицирующую этот пул, а также его состояние, включая указания на состояние выполнения, уровень параллелизма и количество рабочих нитей и задач.

Методы, унаследованные от класса java.util.concurrent.AbstractExecutorService

invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor

Методы, унаследованные от класса java.lang.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)).
Исключения:
SecurityException - если существует менеджер безопасности и вызывающий объект не имеет права изменять потоки, поскольку он не обладает RuntimePermission("modifyThread")

ForkJoinPool

public ForkJoinPool(int parallelism)
Создает ForkJoinPool с указанным уровнем параллелизма, используя значения по умолчанию для всех остальных параметров (см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).
Параметры:
parallelism - уровень параллелизма
Исключения:
IllegalArgumentException - если уровень параллелизма меньше или равен нулю, или больше, чем предел реализации
SecurityException - если существует менеджер безопасности и вызывающий объект не имеет права изменять потоки, поскольку он не обладает RuntimePermission("modifyThread")

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
SecurityException - если существует менеджер безопасности и вызывающий объект не имеет права изменять потоки, поскольку он не обладает RuntimePermission("modifyThread")

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 - минимально допустимое количество основных потоков, не заблокированных соединением или ForkJoinPool.ManagedBlocker. Чтобы обеспечить прогресс, когда существует слишком мало незаблокированных потоков и могут существовать невыполненные задачи, создаются новые потоки вплоть до заданного maximumPoolSize. Для значения по умолчанию используйте 1, что обеспечивает активность. Большее значение может улучшить производительность при наличии заблокированных действий, но может и не улучшить из-за увеличения накладных расходов. Значение нуля может быть приемлемым, когда представленные задачи не могут иметь зависимостей, требующих дополнительных потоков.
saturate - если не равно null, предикат, вызываемый при попытках создать больше, чем максимальное общее допустимое количество потоков. По умолчанию, когда поток собирается заблокироваться на соединении или ForkJoinPool.ManagedBlocker, но не может быть заменен, потому что maximumPoolSize будет превышен, выбрасывается RejectedExecutionException. Но если этот предикат возвращает true, то исключение не выбрасывается, поэтому пул продолжает работать с меньшим, чем целевое количество, работающих потоков, что может не обеспечить прогресс.
keepAliveTime - истекшее время с момента последнего использования, прежде чем поток будет завершен (а затем позже заменен, если необходимо). Для значения по умолчанию используйте 60, TimeUnit.SECONDS.
unit - единица времени для аргумента keepAliveTime
Исключения:
IllegalArgumentException - если параллелизм меньше или равен нулю, или больше, чем предел реализации, или если maximumPoolSize меньше, чем параллелизм, или если keepAliveTime меньше или равен нулю.
NullPointerException - если фабричный метод равен null
SecurityException - если существует менеджер безопасности и вызывающий объект не имеет права изменять потоки, поскольку он не обладает RuntimePermission("modifyThread")
С версии:
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 - если задачу невозможно запланировать на выполнение

выполнить

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

отправить

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

отправить

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 - если задача не может быть запланирована для выполнения

отправить

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 - если задача не может быть запланирована для выполнения

отправить

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

invokeAll

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

получитьФабрику

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

получитьОбработчикНеобработанныхИсключений

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

получитьПараллелизм

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

получитьПараллелизмОбщегоПула

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

получитьРазмерПула

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

получитьАсинхронныйРежим

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

получитьКоличествоЗапущенныхПотоков

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

получитьКоличествоАктивныхПотоков

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

являетсяСпокойным

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

получитьКоличествоВоровства

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

получитьКоличествоОчередиЗадач

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

получитьКоличествоОжидающихОтправлений

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

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(), и не оказывает дополнительного влияния, если уже завершён. Задачи, которые в процессе отправки одновременно в течение этого метода, могут быть отклонены или нет.
Выбрасывает:
SecurityException - если существует диспетчер безопасности и вызывающий не имеет разрешения изменять потоки, потому что он не имеет RuntimePermission("modifyThread")

shutdownNow

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

isTerminated

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

isTerminating

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

isShutdown

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

awaitTermination

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

awaitQuiescence

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

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() сделал это

© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/ForkJoinPool.html

Spec-Zone.ru

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