Spec-Zone .ru
спецификации, руководства, описания, API
|
public class ForkJoinPool extends AbstractExecutorService
ExecutorService
для того, чтобы работать ForkJoinTask
s. A ForkJoinPool
обеспечивает точку входа для представлений от не -ForkJoinTask
клиенты, так же как управление и контролирующие операции. A ForkJoinPool
отличается от других видов ExecutorService
главным образом, на основании использования кражи работы: все потоки в пуле пытаются найти и выполнить задачи, представленные пулу и/или создаваемый другими активными задачами (в конечном счете блокирующий ожидающий работы, если ни один не существует). Это включает эффективной обработке, когда большинство задач порождает другие подзадачи (также, как и больше всего ForkJoinTask
s), так же как когда много маленьких задач представляются пулу от внешних клиентов. Особенно, устанавливая asyncMode к истине в конструкторах, ForkJoinPool
s может также быть подходящим для использования с задачами стиля события, к которым никогда не присоединяются.
Помехи commonPool()
является доступным и подходящим для большинства приложений. Общий пул используется любым ForkJoinTask, который явно не представляется указанному пулу. Используя общий пул обычно уменьшает использование ресурсов (его потоки медленно исправляются в течение периодов неиспользования, и восстанавливаются после последующего использования).
Для приложений, которые требуют отдельных или пользовательских пулов, a ForkJoinPool
может быть создан с данным целевым уровнем параллелизма; по умолчанию, равный числу доступных процессоров. Пул пытается поддержать достаточно активное (или доступный) потоки, динамически добавляя, приостанавливая, или возобновляя внутренние рабочие потоки, даже если некоторые задачи останавливаются, ожидая, чтобы присоединиться к другим. Однако, никакие такие корректировки не гарантируются перед лицом блокированного ввода-вывода или другой неуправляемой синхронизации. Вложенный ForkJoinPool.ManagedBlocker
интерфейс включает расширению видов размещенной синхронизации.
В дополнение к выполнению и способам управления жизненного цикла, этот class обеспечивает методы проверки состояния (например getStealCount()
) это предназначается, чтобы помочь в разработке, настройке, и контроле приложений ветвления/соединения. Кроме того, метод toString()
индикации возвратов относительно пула утверждают в удобной форме для неофициального контроля.
Как имеет место с другим ExecutorServices, есть три основных метода выполнения задачи, полученные в итоге в следующей таблице. Они разрабатываются, чтобы использоваться прежде всего клиентами, не уже занятыми вычислениями ветвления/соединения в текущем пуле. Основные формы этих методов принимают экземпляры ForkJoinTask
, но перегруженные формы также позволяют смешанное выполнение плоскости Runnable
- или Callable
- основанные действия также. Однако, задачи, которые уже выполняются в пуле, должны обычно вместо этого использовать формы в пределах вычисления, перечисленные в таблице, если использование асинхронных задач стиля события, к которым обычно не присоединяются, когда есть небольшое различие среди выбора методов.
Вызовите от non-fork/join клиентов | Вызовите изнутри вычислений ветвления/соединения | |
Расположите асинхронное выполнение | execute(ForkJoinTask) |
ForkJoinTask.fork() |
Ждите и получите результат | invoke(ForkJoinTask) |
ForkJoinTask.invoke() |
Расположите exec и получите Будущее | submit(ForkJoinTask) |
ForkJoinTask.fork() (ForkJoinTasks является Фьючерс), |
Общий пул по умолчанию создается с параметрами значения по умолчанию, но ими можно управлять, устанавливая три системных свойства:
java.util.concurrent.ForkJoinPool.common.parallelism
- уровень параллелизма, неотрицательное целое число java.util.concurrent.ForkJoinPool.common.threadFactory
- имя class a ForkJoinPool.ForkJoinWorkerThreadFactory
java.util.concurrent.ForkJoinPool.common.exceptionHandler
- имя class a Thread.UncaughtExceptionHandler
null
. Примечания реализации: Эта реализация ограничивает максимальное количество выполнения потоков к 32767. Попытки создать пулы с большим чем максимальное количество приводят к IllegalArgumentException
.
Эта реализация отклоняет представленные задачи (то есть, бросая RejectedExecutionException
) только, когда пул выключен, или внутренние ресурсы были исчерпаны.
Модификатор и Тип | Класс и Описание |
---|---|
static interface |
ForkJoinPool. ForkJoinWorkerThreadFactory
Фабрика для того, чтобы создать новый
ForkJoinWorkerThread s. |
static interface |
ForkJoinPool. ManagedBlocker
Интерфейс для того, чтобы расширить управляемый параллелизм для задач, работающих в
ForkJoinPool s. |
Модификатор и Тип | Поле и Описание |
---|---|
static ForkJoinPool.ForkJoinWorkerThreadFactory |
defaultForkJoinWorkerThreadFactory
Создает новый ForkJoinWorkerThread.
|
Конструктор и Описание |
---|
ForkJoinPool()
Создает a
ForkJoinPool с параллелизмом, равным Runtime.availableProcessors() , используя значение по умолчанию распараллеливает фабрику, никакой UncaughtExceptionHandler, и неасинхронный режим обработки LIFO. |
ForkJoinPool(int parallelism)
Создает a
ForkJoinPool с обозначенным уровнем параллелизма, фабрикой потока значения по умолчанию, никаким UncaughtExceptionHandler, и неасинхронным режимом обработки LIFO. |
ForkJoinPool(int parallelism, ForkJoinPool.ForkJoinWorkerThreadFactory factory, Thread.UncaughtExceptionHandler handler, boolean asyncMode)
Создает a
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(ForkJoinTask<?> task)
Устраивает (асинхронное) выполнение данной задачи.
|
void |
execute(Runnable task)
Выполняет данную команду в некоторое время в будущем.
|
int |
getActiveThreadCount()
Возвращает оценку числа потоков, которые в настоящий момент крадут или выполняют задачи.
|
boolean |
getAsyncMode()
Возвраты
true если этот пул использование, локальное первым прибыл - первым убыл режим планирования для разветвленных задач, к которым никогда не присоединяются. |
static int |
getCommonPoolParallelism()
Возвращает предназначенный уровень параллелизма общего пула.
|
ForkJoinPool. ForkJoinWorkerThreadFactory |
getFactory()
Возвращает фабрику, используемую для того, чтобы создать новых рабочих.
|
int |
getParallelism()
Возвращает предназначенный уровень параллелизма этого пула.
|
int |
getPoolSize()
Возвращает число рабочих потоков, которые запустились, но еще не завершились.
|
int |
getQueuedSubmissionCount()
Возвращает оценку числа задач, представленных этому пулу, которые еще не начали выполняться.
|
long |
getQueuedTaskCount()
Возвращает оценку общего количества задач, в настоящий момент сохраненных в очередях рабочими потоками (но не включая задачи, представленные пулу, которые не начали выполняться).
|
int |
getRunningThreadCount()
Возвращает оценку числа рабочих потоков, которые не блокируются, ожидая, чтобы присоединиться к задачам или для другой управляемой синхронизации.
|
long |
getStealCount()
Возвращает оценку общего количества задач, украденных от рабочего списка одного потока другим.
|
Поток. UncaughtExceptionHandler |
getUncaughtExceptionHandler()
Возвращает обработчик для внутренних рабочих потоков, которые завершаются из-за неисправимых ошибок, с которыми встречаются, выполняя задачи.
|
boolean |
hasQueuedSubmissions()
Возвраты
true если есть какие-либо задачи, представленные этому пулу, которые еще не начали выполняться. |
<T> T |
invoke(ForkJoinTask<T> task)
Выполняет данную задачу, возвращая ее результат после завершения.
|
<T> List<Future<T>> |
invokeAll(Collection<? extends Callable<T>> tasks)
Выполняет данные задачи, возвращая список Фьючерса, содержащего их состояние, и заканчивается, когда все завершаются.
|
boolean |
isQuiescent()
Возвраты
true если все рабочие потоки в настоящий момент неактивны. |
boolean |
isShutdown()
Возвраты
true если этот пул был выключен. |
boolean |
isTerminated()
Возвраты
true если все задачи завершились следующий выключенный. |
boolean |
isTerminating()
Возвраты
true если процесс завершения начался, но еще не завершился. |
static void |
managedBlock(ForkJoinPool.ManagedBlocker blocker)
Блоки в соответствии с данным блокировщиком.
|
protected <T> RunnableFuture<T> |
newTaskFor(Callable<T> callable)
Возвращает RunnableFuture для данной вызываемой задачи.
|
protected <T> RunnableFuture<T> |
newTaskFor(Runnable runnable, T value)
Возвращает RunnableFuture для данного выполнимого и значения по умолчанию.
|
protected ForkJoinTask<?> |
pollSubmission()
Удаляет и возвращает следующее невыполняемое представление, если Вы доступны.
|
void |
shutdown()
Возможно инициирует аккуратное завершение работы, на котором выполняются ранее представленные задачи, но никакие новые задачи не будут приняты.
|
List<Runnable> |
shutdownNow()
Возможно попытки отменить и/или остановить все задачи, и отклонить все впоследствии представленные задачи.
|
<T> ForkJoinTask<T> |
submit(Callable<T> task)
Представляет возвращающую значение задачу для выполнения и возвращает Будущее, представляющее результаты на ожидании задачи.
|
<T> ForkJoinTask<T> |
submit(ForkJoinTask<T> task)
Представляет ForkJoinTask для выполнения.
|
ForkJoinTask<?> |
submit(Runnable task)
Представляет Выполнимую задачу для выполнения и возвращает Будущее, представляющее ту задачу.
|
<T> ForkJoinTask<T> |
submit(Runnable task, T result)
Представляет Выполнимую задачу для выполнения и возвращает Будущее, представляющее ту задачу.
|
Строка |
toString()
Возвращает строку, идентифицирующую этот пул, так же как его состояние, включая индикации относительно выполненного состояния, уровня параллелизма, и количеств задачи и рабочего.
|
invokeAll, invokeAny, invokeAny
public static final ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory
public ForkJoinPool()
ForkJoinPool
с параллелизмом, равным Runtime.availableProcessors()
, используя значение по умолчанию распараллеливает фабрику, никакой UncaughtExceptionHandler, и неасинхронный режим обработки LIFO.SecurityException
- если менеджер безопасности существует, и вызывающей стороне не разрешают изменить потоки, потому что это не содержит RuntimePermission
("modifyThread")
public ForkJoinPool(int parallelism)
ForkJoinPool
с обозначенным уровнем параллелизма, фабрикой потока значения по умолчанию, никаким UncaughtExceptionHandler, и неасинхронным режимом обработки LIFO.parallelism
- уровень параллелизмаIllegalArgumentException
- если параллелизм, меньше чем или равный нулю, или больше чем предел реализацииSecurityException
- если менеджер безопасности существует, и вызывающей стороне не разрешают изменить потоки, потому что это не содержит RuntimePermission
("modifyThread")
public ForkJoinPool(int parallelism, ForkJoinPool.ForkJoinWorkerThreadFactory factory, Thread.UncaughtExceptionHandler handler, boolean asyncMode)
ForkJoinPool
с данными параметрами.parallelism
- уровень параллелизма. Для значения по умолчанию использовать Runtime.availableProcessors()
.factory
- фабрика для того, чтобы создать новые потоки. Для значения по умолчанию использовать defaultForkJoinWorkerThreadFactory
.handler
- обработчик для внутренних рабочих потоков, которые завершаются из-за неисправимых ошибок, с которыми встречаются, выполняя задачи. Для значения по умолчанию использовать null
.asyncMode
- если это правда, устанавливает локальный первым прибыл - первым убыл режим планирования для разветвленных задач, к которым никогда не присоединяются. Этот режим может быть более соответствующим чем значение по умолчанию локально стековый режим в приложениях, в которых рабочие потоки только обрабатывают стиль события асинхронные задачи. Для значения по умолчанию использовать false
.IllegalArgumentException
- если параллелизм, меньше чем или равный нулю, или больше чем предел реализацииNullPointerException
- если фабрика является нулемSecurityException
- если менеджер безопасности существует, и вызывающей стороне не разрешают изменить потоки, потому что это не содержит RuntimePermission
("modifyThread")
public static ForkJoinPool commonPool()
shutdown()
или shutdownNow()
. Однако этот пул и любая продолжающаяся обработка автоматически завершаются согласно программе System.exit(int)
. Любая программа, которая полагается на асинхронную обработку задачи, чтобы завершиться перед завершением программы, должна вызвать commonPool().
awaitQuiescence
, перед выходом.public <T> T invoke(ForkJoinTask<T> task)
ex.printStackTrace()
) из обоих текущий поток так же как поток, фактически встречающийся с исключением; минимально только последний.task
- задачаNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic void execute(ForkJoinTask<?> task)
task
- задачаNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic void execute(Runnable task)
Executor
task
- выполнимая задачаNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic <T> ForkJoinTask<T> submit(ForkJoinTask<T> task)
task
- задача подчинитьсяNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic <T> ForkJoinTask<T> submit(Callable<T> task)
ExecutorService
Если требуется сразу блокировать ожидание задачи, можно использовать конструкции формы result = exec.submit(aCallable).get();
Отметьте: Executors
class включает ряд методов, которые могут преобразовать некоторые другие общие подобные закрытию объекты, например, PrivilegedAction
к Callable
сформируйтесь, таким образом, они могут быть представлены.
submit
в интерфейсе ExecutorService
submit
в class AbstractExecutorService
task
- задача подчинитьсяNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic <T> ForkJoinTask<T> submit(Runnable task, T result)
ExecutorService
submit
в интерфейсе ExecutorService
submit
в class AbstractExecutorService
task
- задача подчинитьсяresult
- результат возвратитьсяNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic ForkJoinTask<?> submit(Runnable task)
ExecutorService
submit
в интерфейсе ExecutorService
submit
в class AbstractExecutorService
task
- задача подчинитьсяNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
ExecutorService
Future.isDone()
true для каждого элемента возвращенного списка. Отметьте, что завершенная задача, возможно, завершилась или обычно или выдавая исключение. Результаты этого метода неопределены, если данный набор изменяется, в то время как эта работа происходит.invokeAll
в интерфейсе ExecutorService
invokeAll
в class AbstractExecutorService
tasks
- набор задачNullPointerException
- если задачами или каким-либо из его элементов является nullRejectedExecutionException
- если какая-либо задача не может быть запланирована для выполненияpublic ForkJoinPool.ForkJoinWorkerThreadFactory getFactory()
public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
null
если ни одинpublic int getParallelism()
public static int getCommonPoolParallelism()
public int getPoolSize()
getParallelism()
когда потоки создаются, чтобы поддержать параллелизм, когда другие совместно блокируются.public boolean getAsyncMode()
true
если этот пул использование, локальное первым прибыл - первым убыл режим планирования для разветвленных задач, к которым никогда не присоединяются.true
если этот пул использует асинхронный режимpublic int getRunningThreadCount()
public int getActiveThreadCount()
public boolean isQuiescent()
true
если все рабочие потоки в настоящий момент неактивны. Неактивный рабочий является тем, который не может получить задачу выполниться, потому что ни один не доступен, чтобы украсть от других потоков, и нет никаких представлений на ожидании к пулу. Этот метод консервативен; это не могло бы возвратиться true
непосредственно после безделья всех потоков, но в конечном счете станет истиной, если потоки останутся неактивными.true
если все потоки в настоящий момент неактивныpublic long getStealCount()
public long getQueuedTaskCount()
public int getQueuedSubmissionCount()
public boolean hasQueuedSubmissions()
true
если есть какие-либо задачи, представленные этому пулу, которые еще не начали выполняться.true
если есть какие-либо представления с очередямиprotected ForkJoinTask<?> pollSubmission()
null
если ни одинprotected int drainTasksTo(Collection<? super ForkJoinTask<?>> c)
c
может привести к элементам, находящимся ни в одном, или или оба набора, когда связанное исключение выдается. Поведение этой работы неопределено, если указанный набор изменяется, в то время как работа происходит.c
- набор, чтобы передать элементы вpublic String toString()
public void shutdown()
commonPool()
, и никакой дополнительный эффект если уже выключенный. Задачи, которые находятся в процессе того, чтобы быть представленным одновременно в течение этого метода, могут или не могут быть отклонены.SecurityException
- если менеджер безопасности существует, и вызывающей стороне не разрешают изменить потоки, потому что это не содержит RuntimePermission
("modifyThread")
public List<Runnable> shutdownNow()
commonPool()
, и никакой дополнительный эффект если уже выключенный. Иначе, задачи, которые находятся в процессе того, чтобы быть представленным или выполнены одновременно в течение этого метода, могут или не могут быть отклонены. Этот метод отменяет и существующие и невыполняемые задачи, чтобы разрешить завершение в присутствии зависимостей от задачи. Таким образом, метод всегда возвращает пустой список (в отличие от случая для некоторых других Исполнителей).SecurityException
- если менеджер безопасности существует, и вызывающей стороне не разрешают изменить потоки, потому что это не содержит RuntimePermission
("modifyThread")
public boolean isTerminated()
true
если все задачи завершились следующий выключенный.true
если все задачи завершились следующий выключенныйpublic boolean isTerminating()
true
если процесс завершения начался, но еще не завершился. Этот метод может быть полезным для отладки. Возврат true
сообщаемый достаточный период после завершения работы может указать, что представленные задачи проигнорировали или подавили прерывание, или ожидают ввода-вывода, заставляя этого исполнителя не должным образом завершиться. (См. консультативные примечания для class ForkJoinTask
утверждение, что задачи не должны обычно влечь за собой операции блокирования. Но если они делают, они должны прервать их на прерывании.)true
завершаясь, но еще завершенныйpublic boolean isShutdown()
true
если этот пул был выключен.true
если этот пул был выключенpublic boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
commonPool()
никогда не завершается до завершения работы программы, когда применено к общий пул, этот метод эквивалентен awaitQuiescence(long, TimeUnit)
но всегда возвраты false
.timeout
- максимальное время, чтобы ожидатьunit
- единица измерения времени параметра тайм-аутаtrue
если этот исполнитель завершал и false
если тайм-аут, законченный перед завершениемInterruptedException
- если прервано, ожидаяpublic boolean awaitQuiescence(long timeout, TimeUnit unit)
ForkJoinTask.helpQuiesce()
. Иначе, ожидает и/или пытается помочь задачам выполнения до этого пула isQuiescent()
или обозначенный тайм-аут протекает.timeout
- максимальное время, чтобы ожидатьunit
- единица измерения времени параметра тайм-аутаtrue
если статический; false
если тайм-аут протекал.public static void managedBlock(ForkJoinPool.ManagedBlocker blocker) throws InterruptedException
ForkJoinWorkerThread
, этот метод возможно принимает меры, чтобы запасной поток был активирован в случае необходимости, чтобы гарантировать достаточный параллелизм, в то время как текущий поток блокируется. Если вызывающая сторона не является a ForkJoinTask
, этот метод поведенчески эквивалентен
while (!blocker.isReleasable())
if (blocker.block())
return;
Если вызывающая сторона является a ForkJoinTask
, тогда пул может сначала быть расширен, чтобы гарантировать параллелизм, и позже скорректирован.blocker
- блокировщикInterruptedException
- если blocker.block сделал такprotected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value)
AbstractExecutorService
newTaskFor
в class AbstractExecutorService
runnable
- выполнимая обертываемая задачаvalue
- значение по умолчанию для возвращенного будущегоprotected <T> RunnableFuture<T> newTaskFor(Callable<T> callable)
AbstractExecutorService
newTaskFor
в class AbstractExecutorService
callable
- вызываемая обертываемая задача
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92