Класс ForkJoinPool
- Все реализуемые интерфейсы:
-
Executor,ExecutorService
public class ForkJoinPool extends AbstractExecutorService
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
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
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 |
Создаёт ForkJoinPool с указанным уровнем параллелизма, используя значения по умолчанию для всех других параметров (см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)). |
ForkJoinPool |
Создаёт ForkJoinPool с заданными параметрами (значения по умолчанию для остальных — см. ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)). |
ForkJoinPool |
Создаёт ForkJoinPool с заданными параметрами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
awaitQuiescence |
Если вызывается задачей ForkJoinTask, работающей в этом пуле, эквивалентно в эффекте ForkJoinTask.helpQuiesce(). |
boolean |
awaitTermination |
Ожидает завершения всех задач после запроса остановки или истечения таймаута или прерывания текущей нити, что произойдет раньше. |
static ForkJoinPool |
commonPool() |
Возвращает экземпляр общего пула. |
protected int |
drainTasksTo |
Удаляет все доступные невыполненные переданные и разветвлённые задачи из очередей планирования и добавляет их в заданный набор, не изменяя их статус выполнения. |
void |
execute |
Выполняет заданный командный объект в какой-то момент в будущем. |
void |
execute |
Организует (асинхронное) выполнение заданной задачи. |
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 |
Выполняет заданную задачу и возвращает её результат по завершении. |
<T> List<Future<T>> |
invokeAll |
Выполняет заданные задачи, возвращая список объектов Future, содержащих их состояние и результаты, когда все завершатся. |
boolean |
isQuiescent() |
Возвращает true если все рабочие нити в данный момент бездействуют. |
boolean |
isShutdown() |
Возвращает true если этот пул был остановлен. |
boolean |
isTerminated() |
Возвращает true если все задачи завершены после остановки. |
boolean |
isTerminating() |
Возвращает true если процесс завершения начался, но ещё не завершился. |
static void |
managedBlock |
Выполняет заданную, возможно блокирующую задачу. |
protected ForkJoinTask<?> |
pollSubmission() |
Удаляет и возвращает следующую невыполненную задачу, если она доступна. |
void |
shutdown() |
Возможно инициирует упорядоченную остановку, в которой ранее переданные задачи выполняются, но новые задачи не принимаются. |
List<Runnable> |
shutdownNow() |
Возможно пытается отменить и/или остановить все задачи и отклонить все последующие переданные задачи. |
ForkJoinTask<?> |
submit |
Отправляет задачу Runnable для выполнения и возвращает Future, представляющий эту задачу. |
<T> ForkJoinTask<T> |
submit |
Отправляет задачу Runnable для выполнения и возвращает Future, представляющий эту задачу. |
<T> ForkJoinTask<T> |
submit |
Отправляет возвращающую значение задачу для выполнения и возвращает Future, представляющее ожидаемые результаты задачи. |
<T> ForkJoinTask<T> |
submit |
Отправляет ForkJoinTask для выполнения. |
String |
toString() |
Возвращает строку, идентифицирующую этот пул, а также его состояние, включая указания на состояние выполнения, уровень параллелизма и количество рабочих нитей и задач. |
Методы, унаследованные от класса java.util.concurrent.AbstractExecutorService
invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor
Краткое описание полей
defaultForkJoinWorkerThreadFactory
public static final ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory
Краткое описание конструкторов
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)
ExecutorExecutor.- Параметры:
-
task- задача Runnable - Исключения:
-
NullPointerException- если задача равна null -
RejectedExecutionException- если задача не может быть запланирована для выполнения
отправить
public <T> ForkJoinTask<T> submit(ForkJoinTask<T> task)
- Параметры типа:
-
T- тип результата задачи - Параметры:
-
task- задача для отправки - Возвращает:
- задачу
- Исключения:
-
NullPointerException- если задача равна null -
RejectedExecutionException- если задача не может быть запланирована для выполнения
отправить
public <T> ForkJoinTask<T> submit(Callable<T> task)
ExecutorServiceget 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)
ExecutorServiceget Future вернёт заданный результат при успешном завершении.- Определено в:
-
submitв интерфейсеExecutorService - Переопределяет:
-
submitв классеAbstractExecutorService - Параметры типа:
-
T- тип результата - Параметры:
-
task- задача для отправки -
result- возвращаемый результат - Возвращает:
- Future, представляющее ожидаемое завершение задачи
- Исключения:
-
NullPointerException- если задача равна null -
RejectedExecutionException- если задача не может быть запланирована для выполнения
отправить
public ForkJoinTask<?> submit(Runnable task)
ExecutorServiceget Future вернёт null при успешном завершении.- Определено в:
-
submitв интерфейсеExecutorService - Переопределяет:
-
submitв классеAbstractExecutorService - Параметры:
-
task- задача для отправки - Возвращает:
- Future, представляющее ожидаемое завершение задачи
- Исключения:
-
NullPointerException- если задача равна null -
RejectedExecutionException- если задача не может быть запланирована для выполнения
invokeAll
public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
ExecutorServiceFuture.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.helpQuiesce(). В противном случае ждёт и/или пытается помочь в выполнении задач до тех пор, пока этот пул isQuiescent() или не истечёт указанный таймаут.- Параметры:
-
timeout- максимальное время ожидания -
unit- единица измерения времени аргумента таймаута - Возвращает:
-
true, если неактивен;false, если таймаут истек.
managedBlock
public static void managedBlock(ForkJoinPool.ManagedBlocker blocker) throws InterruptedException
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