ForkJoinPool Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
An ExecutorService
for running ForkJoinTask
s.
[Android.Runtime.Register("java/util/concurrent/ForkJoinPool", DoNotGenerateAcw=true)]
public class ForkJoinPool : Java.Util.Concurrent.AbstractExecutorService
[<Android.Runtime.Register("java/util/concurrent/ForkJoinPool", DoNotGenerateAcw=true)>]
type ForkJoinPool = class
inherit AbstractExecutorService
- Наследование
- Атрибуты
Комментарии
An ExecutorService
for running ForkJoinTask
s. Предоставляет ForkJoinPool
точку входа для отправки от клиентовForkJoinTask
, а также операций управления и мониторинга.
В ForkJoinPool
отличие от других видов ExecutorService
, в основном благодаря использованию <em>work-stealing</em>: все потоки в пуле пытаются найти и выполнить задачи, отправленные в пул, и /или созданные другими активными задачами (в конечном итоге блокируют ожидание работы, если нет). Это позволяет эффективно обрабатывать, когда большинство задач создают другие подзадачи (как и большинство ForkJoinTask
s), а также когда многие небольшие задачи отправляются в пул из внешних клиентов. Особенно при задании <em>asyncMode</em> значение true в конструкторах также может быть подходящим для использования с задачами стиля событий, ForkJoinPool
которые никогда не присоединяются. Все рабочие потоки инициализированы с набором Thread#isDaemon
true
.
#commonPool()
Статический доступен и подходит для большинства приложений. Общий пул используется любым ForkJoinTask, который не отправляется в указанный пул явным образом. Использование общего пула обычно уменьшает использование ресурсов (его потоки медленно удаляются в периоды неиспользования и восстанавливаются при последующем использовании).
Для приложений, требующих отдельных или настраиваемых пулов, ForkJoinPool
можно создать с заданным уровнем параллелизма целевого объекта; по умолчанию равно количеству доступных процессоров. Пул пытается поддерживать достаточно активных (или доступных) потоков путем динамического добавления, приостановки или возобновления внутренних рабочих потоков, даже если некоторые задачи остановлены, ожидая присоединения к другим. Однако такая корректировка не гарантируется в случае блокировки ввода-вывода или другой неуправляемой синхронизации. Вложенный ManagedBlocker
интерфейс обеспечивает расширение типов синхронизации, включаемых в нее. Политики по умолчанию могут быть переопределены с помощью конструктора с параметрами, соответствующими указанным в классе ThreadPoolExecutor
.
Помимо методов управления выполнением и жизненным циклом, этот класс предоставляет методы проверки состояния (например #getStealCount
, предназначенные для разработки, настройки и мониторинга приложений вилки и соединения). Кроме того, метод #toString
возвращает признаки состояния пула в удобной форме для неформального мониторинга.
Как и в случае с другими исполнителями, в следующей таблице приведены три основных метода выполнения задач. Они предназначены для использования в основном клиентами, не участвующими в вычислениях вилки или соединения в текущем пуле. Основные формы этих методов принимают экземпляры ForkJoinTask
, но перегруженные формы также разрешают смешанное выполнение простых Runnable
или Callable
основанных действий. Однако задачи, которые уже выполняются в пуле, обычно должны использовать формы внутри вычислений, перечисленные в таблице, если не используются асинхронные задачи стиля событий, которые обычно не присоединены, в этом случае мало различий между выбором методов.
<table class="plain">caption Summary of task execution methods</caption>><tr<>td/td<><> th scope="col"> Call from non-fork/join clients</<>th th scope="col"> Call from within fork/join computations</<>th/tr tr><><th scope="row" style="text-align:left"> Упорядочить асинхронное выполнение><</thd><#execute(ForkJoinTask)
/td/td></td>ForkJoinTask#fork
<><</tr><tr><th scope="row" style="text-align:left"> Await и get result<></th td>#invoke(ForkJoinTask)
</td<<ForkJoinTask#invoke
>>/><tr tr><th><scope="row" style="text-align:left"> Упорядочить exec и получить future</<>th td<>#submit(ForkJoinTask)
/td><ForkJoinTask#fork
> (ForkJoinTasks <em>are</em> Futures)</td<>/tr></table>
Параметры, используемые для создания общего пула, можно контролировать, задав следующие свойства системы System#getProperty: <ul><lijava.util.concurrent.ForkJoinPool.common.parallelism
> - уровень параллелизма, неотрицательное целое число <li>java.util.concurrent.ForkJoinPool.common.threadFactory
- имя класса a.ForkJoinWorkerThreadFactory
Загрузчик системного класса ClassLoader#getSystemClassLoader() используется для загрузки этого класса. <li>java.util.concurrent.ForkJoinPool.common.exceptionHandler
— имя класса объекта UncaughtExceptionHandler
. Загрузчик системного класса ClassLoader#getSystemClassLoader() используется для загрузки этого класса. <li>java.util.concurrent.ForkJoinPool.common.maximumSpares
— максимальное число разрешенных дополнительных потоков для поддержания целевого параллелизма (по умолчанию 256). </ul> , если фабрика потоков не предоставляется через системное свойство, общий пул использует фабрику, которая использует загрузчик системного класса в качестве загрузчика класса thread#getContextClassLoader() класса контекста потока. Кроме того, если SecurityManager
присутствует, общий пул использует заводские потоки, которые не Permissions
включены.
При возникновении ошибки при установке этих параметров используются параметры по умолчанию. Можно отключить или ограничить использование потоков в общем пуле, задав свойству параллелизма нулевое значение и (или) с помощью фабрики, которая может возвращать null
. Однако это может привести к тому, что невыполненные задачи никогда не выполняются.
<Примечание о реализации:></b> Эта реализация ограничивает максимальное число выполняемых потоков до 32767. Пытается создать пулы с максимальным числом IllegalArgumentException
.
Эта реализация отклоняет отправленные задачи (т. е. вызов) RejectedExecutionException
только при завершении работы пула или исчерпании внутренних ресурсов.
Добавлено в версии 1.7.
Документация по Java для java.util.concurrent.ForkJoinPool
.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.
Конструкторы
ForkJoinPool() |
Создает параллелизм, равный |
ForkJoinPool(Int32) |
|
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
|
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
An |
ForkJoinPool(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
ActiveThreadCount |
Возвращает оценку количества потоков, которые в настоящее время крадут или выполняют задачи. |
AsyncMode |
Возвращает, |
Class |
Возвращает класс среды выполнения этого |
CommonPoolParallelism |
Возвращает целевой уровень параллелизма общего пула. |
DefaultForkJoinWorkerThreadFactory |
Создает новый forkJoinWorkerThread. |
Factory |
Возвращает фабрику, используемую для создания новых рабочих ролей. |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
HasQueuedSubmissions |
Возвращается |
IsQuiescent |
Возвращает, |
IsShutdown |
Возвращает значение |
IsTerminated |
Возвращает, |
IsTerminating |
Возвращается |
JniIdentityHashCode |
An |
JniPeerMembers |
An |
Parallelism |
Возвращает целевой уровень параллелизма этого пула. |
PeerReference |
An |
PoolSize |
Возвращает число рабочих потоков, которые начались, но еще не завершены. |
QueuedSubmissionCount |
Возвращает оценку количества задач, отправленных в этот пул, которые еще не начали выполняться. |
QueuedTaskCount |
Возвращает оценку общего количества задач, которые в настоящее время хранятся в очередях рабочими потоками (но не включая задачи, отправленные в пул, которые не начали выполняться). |
RunningThreadCount |
Возвращает оценку количества рабочих потоков, которые не блокируются, ожидая присоединения к задачам или для другой управляемой синхронизации. |
StealCount |
Возвращает оценку общего числа завершенных задач, выполняемых потоком, кроме их отправителя. |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
UncaughtExceptionHandler |
Возвращает обработчик для внутренних рабочих потоков, которые завершаются из-за неустранимых ошибок, возникших при выполнении задач. |
Методы
AwaitQuiescence(Int64, TimeUnit) |
Если вызывается forkJoinTask, работающий в этом пуле, эквивалентно. |
AwaitTermination(Int64, TimeUnit) |
Блоки, пока все задачи не завершились после запроса завершения работы, или время ожидания, или текущий поток прерван, в зависимости от того, что происходит сначала. |
AwaitTerminationAsync(Int64, TimeUnit) |
An |
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
CommonPool() |
Возвращает общий экземпляр пула. |
Dispose() |
An |
Dispose(Boolean) |
An |
DrainTasksTo(ICollection<ForkJoinTask>) |
Удаляет все доступные неисправные отправленные и вилированные задачи из очередей планирования и добавляет их в указанную коллекцию без изменения состояния выполнения. |
Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
Execute(ForkJoinTask) |
Упорядочивает (асинхронное) выполнение заданной задачи. |
Execute(IRunnable) | |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
Invoke(ForkJoinTask) |
Выполняет заданную задачу, возвращая результат после завершения. |
InvokeAll(ICollection) |
An |
InvokeAll(ICollection, Int64, TimeUnit) |
An |
InvokeAny(ICollection) |
An |
InvokeAny(ICollection, Int64, TimeUnit) |
An |
JavaFinalize() |
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
ManagedBlock(ForkJoinPool+IManagedBlocker) |
Выполняет заданную, возможно, блокировку задачи. |
NewTaskFor(ICallable) |
|
NewTaskFor(IRunnable, Object) |
|
Notify() |
Пробуждение одного потока, ожидающего монитора этого объекта. (Унаследовано от Object) |
NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
PollSubmission() |
Удаляет и возвращает следующую неисследованную отправку, если она доступна. |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
Shutdown() |
Возможно, инициируется упорядоченное завершение работы, в которой выполняются ранее отправленные задачи, но новые задачи не будут приняты. |
ShutdownNow() |
Возможно, пытается отменить и(или) остановить все задачи и отклонить все последующие отправленные задачи. |
Submit(ForkJoinTask) |
Отправляет forkJoinTask для выполнения. |
Submit(ICallable) |
An |
Submit(IRunnable) |
Отправляет задачу Runnable для выполнения и возвращает будущее, представляющее задачу. (Унаследовано от AbstractExecutorService) |
Submit(IRunnable, Object) |
An |
ToArray<T>() |
An |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
UnregisterFromRuntime() |
An |
Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>. (Унаследовано от Object) |
Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
An |
IJavaPeerable.DisposeUnlessReferenced() |
An |
IJavaPeerable.Finalized() |
An |
IJavaPeerable.JniManagedPeerState |
An |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
An |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
An |
IJavaPeerable.SetPeerReference(JniObjectReference) |
An |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
An |
GetJniTypeName(IJavaPeerable) |
An |
AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
An |
InvokeAnyAsync(IExecutorService, ICollection) |
An |
InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
An |