Spec-Zone .ru
спецификации, руководства, описания, API
|
public class ForkJoinPool extends AbstractExecutorService
ExecutorService
для того, чтобы работать ForkJoinTask
s. A ForkJoinPool
обеспечивает точку входа для представлений от не -ForkJoinTask
клиенты, так же как управление и контролирующие операции. A ForkJoinPool
отличается от других видов ExecutorService
главным образом, на основании использования кражи работы: все потоки в пуле пытаются найти и выполнить подзадачи, создаваемые другими активными задачами (в конечном счете блокирующий ожидающий работы, если ни один не существует). Это включает эффективной обработке, когда большинство задач порождает другие подзадачи (также, как и больше всего ForkJoinTask
s). Устанавливая asyncMode к истине в конструкторах, ForkJoinPool
s может также быть подходящим для использования с задачами стиля события, к которым никогда не присоединяются.
A ForkJoinPool
создается с данным целевым уровнем параллелизма; по умолчанию, равный числу доступных процессоров. Пул пытается поддержать достаточно активное (или доступный) потоки, динамически добавляя, приостанавливая, или возобновляя внутренние рабочие потоки, даже если некоторые задачи останавливаются, ожидая, чтобы присоединиться к другим. Однако, никакие такие корректировки не гарантируются перед лицом блокированного IO или другой неуправляемой синхронизации. Вложенный ForkJoinPool.ManagedBlocker
соедините интерфейсом с расширением включений видов размещенной синхронизации.
В дополнение к выполнению и способам управления жизненного цикла, этот класс обеспечивает методы проверки состояния (например getStealCount()
) это предназначается, чтобы помочь в разработке, настройке, и контроле приложений ветвления/соединения. Кроме того, метод toString()
индикации возвратов относительно пула утверждают в удобной форме для неофициального контроля.
Как имеет место с другим ExecutorServices, есть три основных метода выполнения задачи, полученные в итоге в следующей таблице. Они разрабатываются, чтобы использоваться клиентами, не уже занятыми вычислениями ветвления/соединения в текущем пуле. Основные формы этих методов принимают экземпляры ForkJoinTask
, но перегруженные формы также позволяют смешанное выполнение плоскости Runnable
- или Callable
- основанные действия также. Однако, задачи, которые уже выполняются в пуле, не должны обычно использовать эти методы выполнения пула, но вместо этого использовать формы в пределах вычисления, перечисленные в таблице.
Вызовите от non-fork/join клиентов | Вызовите изнутри вычислений ветвления/соединения | |
Расположите асинхронное выполнение | execute(ForkJoinTask) |
ForkJoinTask.fork() |
Ждите и получите результат | invoke(ForkJoinTask) |
ForkJoinTask.invoke() |
Расположите exec и получите Будущее | submit(ForkJoinTask) |
ForkJoinTask.fork() (ForkJoinTasks является Фьючерс), |
Демонстрационное Использование. Обычно сингл ForkJoinPool
используется для всего параллельного выполнения задачи в программе или подсистеме. Иначе, использование обычно не перевешивало бы конструкцию и бухгалтерские издержки создания большого набора потоков. Например, общий пул мог использоваться для SortTasks
иллюстрированный в RecursiveAction
. Поскольку ForkJoinPool
потоки использования в режиме демона, обычно нет никакой потребности к явно shutdown
такой пул на выход программы.
static final ForkJoinPool mainPool = new ForkJoinPool(); ... public void sort(long[] array) { mainPool.invoke(new SortTask(array, 0, array.length)); }
Примечания реализации: Эта реализация ограничивает максимальное количество выполнения потоков к 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 |
awaitTermination(long timeout, TimeUnit unit)
Блоки до всех задач завершили выполнение после запроса завершения работы, или тайм-аут происходит, или текущий поток прерывается, какой бы ни происходит сначала.
|
protected int |
drainTasksTo(Collection<? super ForkJoinTask<?>> c)
Удаляет все доступные невыполняемые представленные и разветвленные задачи из планирования очередей и добавляет их к данному набору, не изменяя их состояние выполнения.
|
void |
execute(ForkJoinTask<?> task)
Устраивает (асинхронное) выполнение данной задачи.
|
void |
execute(Runnable task)
Выполняет данную команду в некоторое время в будущем.
|
int |
getActiveThreadCount()
Возвращает оценку числа потоков, которые в настоящий момент крадут или выполняют задачи.
|
boolean |
getAsyncMode()
Возвраты
true если этот пул использование, локальное первым прибыл - первым убыл режим планирования для разветвленных задач, к которым никогда не присоединяются. |
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 <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
класс включает ряд методов, которые могут преобразовать некоторые другие общие подобные закрытию объекты, например, PrivilegedAction
к Callable
сформируйтесь, таким образом, они могут быть представлены.
submit
в интерфейсе ExecutorService
submit
в классе AbstractExecutorService
task
- задача подчинитьсяNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic <T> ForkJoinTask<T> submit(Runnable task, T result)
ExecutorService
submit
в интерфейсе ExecutorService
submit
в классе AbstractExecutorService
task
- задача подчинитьсяresult
- результат возвратитьсяNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic ForkJoinTask<?> submit(Runnable task)
ExecutorService
submit
в интерфейсе ExecutorService
submit
в классе AbstractExecutorService
task
- задача подчинитьсяNullPointerException
- если задачей является нульRejectedExecutionException
- если задача не может быть запланирована для выполненияpublic <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
ExecutorService
Future.isDone()
true для каждого элемента возвращенного списка. Отметьте, что завершенная задача, возможно, завершилась или обычно или выдавая исключение. Результаты этого метода неопределены, если данный набор изменяется, в то время как эта работа происходит.invokeAll
в интерфейсе ExecutorService
invokeAll
в классе AbstractExecutorService
tasks
- набор задачNullPointerException
- если задачами или каким-либо из его элементов является nullRejectedExecutionException
- если какая-либо задача не может быть запланирована для выполненияpublic ForkJoinPool.ForkJoinWorkerThreadFactory getFactory()
public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
null
если ни одинpublic int getParallelism()
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()
SecurityException
- если менеджер безопасности существует, и вызывающей стороне не разрешают изменить потоки, потому что это не содержит RuntimePermission
("modifyThread")
public List<Runnable> shutdownNow()
SecurityException
- если менеджер безопасности существует, и вызывающей стороне не разрешают изменить потоки, потому что это не содержит RuntimePermission
("modifyThread")
public boolean isTerminated()
true
если все задачи завершились следующий выключенный.true
если все задачи завершились следующий выключенныйpublic boolean isTerminating()
true
если процесс завершения начался, но еще не завершился. Этот метод может быть полезным для отладки. Возврат true
сообщаемый достаточный период после завершения работы может указать, что представленные задачи проигнорировали или подавили прерывание, или ожидают IO, заставляя этого исполнителя не должным образом завершиться. (См. консультативные примечания для класса ForkJoinTask
утверждение, что задачи не должны обычно влечь за собой операции блокирования. Но если они делают, они должны прервать их на прерывании.)true
завершаясь, но еще завершенныйpublic boolean isShutdown()
true
если этот пул был выключен.true
если этот пул был выключенpublic boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
timeout
- максимальное время, чтобы ожидатьunit
- единица измерения времени параметра тайм-аутаtrue
если этот исполнитель завершал и false
если тайм-аут, законченный перед завершениемInterruptedException
- если прервано, ожидая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
в классе AbstractExecutorService
runnable
- выполнимая обертываемая задачаvalue
- значение по умолчанию для возвращенного будущегоprotected <T> RunnableFuture<T> newTaskFor(Callable<T> callable)
AbstractExecutorService
newTaskFor
в классе AbstractExecutorService
callable
- вызываемая обертываемая задача
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.