Поделиться через


ForkJoinPool Класс

Определение

An ExecutorService for running ForkJoinTasks.

[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 ForkJoinTasks. Предоставляет ForkJoinPool точку входа для отправки от клиентовForkJoinTask , а также операций управления и мониторинга.

В ForkJoinPool отличие от других видов ExecutorService , в основном благодаря использованию <em>work-stealing</em>: все потоки в пуле пытаются найти и выполнить задачи, отправленные в пул, и /или созданные другими активными задачами (в конечном итоге блокируют ожидание работы, если нет). Это позволяет эффективно обрабатывать, когда большинство задач создают другие подзадачи (как и большинство ForkJoinTasks), а также когда многие небольшие задачи отправляются в пул из внешних клиентов. Особенно при задании <em>asyncMode</em> значение true в конструкторах также может быть подходящим для использования с задачами стиля событий, ForkJoinPoolкоторые никогда не присоединяются. Все рабочие потоки инициализированы с набором Thread#isDaemontrue.

#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()

Создает параллелизм, равный ForkJoinPooljava.lang.Runtime#availableProcessors, используя значения по умолчанию для всех остальных параметров (см. раздел #ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

ForkJoinPool(Int32)

ForkJoinPool Создает объект с указанным уровнем параллелизма, используя значения по умолчанию для всех остальных параметров (см. раздел #ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)).

ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean)

ForkJoinPool Создает параллелизм, равный java.lang.Runtime#availableProcessors, с помощью фабрики потоков по умолчанию #defaultForkJoinWorkerThreadFactory, без UncaughtExceptionHandler и асинхронного режима обработки LIFO.

ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit)

An ExecutorService for running ForkJoinTasks.

ForkJoinPool(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

ActiveThreadCount

Возвращает оценку количества потоков, которые в настоящее время крадут или выполняют задачи.

AsyncMode

Возвращает, true если в этом пуле используется локальный режим планирования первого в первую очередь для вилированных задач, которые никогда не присоединяются.

Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
CommonPoolParallelism

Возвращает целевой уровень параллелизма общего пула.

DefaultForkJoinWorkerThreadFactory

Создает новый forkJoinWorkerThread.

Factory

Возвращает фабрику, используемую для создания новых рабочих ролей.

Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
HasQueuedSubmissions

Возвращается true , если в этом пуле есть какие-либо задачи, которые еще не начали выполняться.

IsQuiescent

Возвращает, true если все рабочие потоки в настоящее время неактивны.

IsShutdown

Возвращает значение true , если этот пул был завершен.

IsTerminated

Возвращает, true если все задачи завершились после завершения работы.

IsTerminating

Возвращается true , если процесс завершения начался, но еще не завершен.

JniIdentityHashCode

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
JniPeerMembers

An ExecutorService for running ForkJoinTasks.

Parallelism

Возвращает целевой уровень параллелизма этого пула.

PeerReference

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
PoolSize

Возвращает число рабочих потоков, которые начались, но еще не завершены.

QueuedSubmissionCount

Возвращает оценку количества задач, отправленных в этот пул, которые еще не начали выполняться.

QueuedTaskCount

Возвращает оценку общего количества задач, которые в настоящее время хранятся в очередях рабочими потоками (но не включая задачи, отправленные в пул, которые не начали выполняться).

RunningThreadCount

Возвращает оценку количества рабочих потоков, которые не блокируются, ожидая присоединения к задачам или для другой управляемой синхронизации.

StealCount

Возвращает оценку общего числа завершенных задач, выполняемых потоком, кроме их отправителя.

ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

UncaughtExceptionHandler

Возвращает обработчик для внутренних рабочих потоков, которые завершаются из-за неустранимых ошибок, возникших при выполнении задач.

Методы

AwaitQuiescence(Int64, TimeUnit)

Если вызывается forkJoinTask, работающий в этом пуле, эквивалентно.ForkJoinTask#helpQuiesce

AwaitTermination(Int64, TimeUnit)

Блоки, пока все задачи не завершились после запроса завершения работы, или время ожидания, или текущий поток прерван, в зависимости от того, что происходит сначала.

AwaitTerminationAsync(Int64, TimeUnit)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от AbstractExecutorService)
Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
CommonPool()

Возвращает общий экземпляр пула.

Dispose()

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
Dispose(Boolean)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
DrainTasksTo(ICollection<ForkJoinTask>)

Удаляет все доступные неисправные отправленные и вилированные задачи из очередей планирования и добавляет их в указанную коллекцию без изменения состояния выполнения.

Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
Execute(ForkJoinTask)

Упорядочивает (асинхронное) выполнение заданной задачи.

Execute(IRunnable)
GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
Invoke(ForkJoinTask)

Выполняет заданную задачу, возвращая результат после завершения.

InvokeAll(ICollection)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от AbstractExecutorService)
InvokeAll(ICollection, Int64, TimeUnit)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от AbstractExecutorService)
InvokeAny(ICollection)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от AbstractExecutorService)
InvokeAny(ICollection, Int64, TimeUnit)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от AbstractExecutorService)
JavaFinalize()

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
ManagedBlock(ForkJoinPool+IManagedBlocker)

Выполняет заданную, возможно, блокировку задачи.

NewTaskFor(ICallable)

RunnableFuture Возвращает объект для данной вызываемой задачи.

(Унаследовано от AbstractExecutorService)
NewTaskFor(IRunnable, Object)

RunnableFuture Возвращает значение для заданного значения runnable и по умолчанию.

(Унаследовано от AbstractExecutorService)
Notify()

Пробуждение одного потока, ожидающего монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
PollSubmission()

Удаляет и возвращает следующую неисследованную отправку, если она доступна.

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
Shutdown()

Возможно, инициируется упорядоченное завершение работы, в которой выполняются ранее отправленные задачи, но новые задачи не будут приняты.

ShutdownNow()

Возможно, пытается отменить и(или) остановить все задачи и отклонить все последующие отправленные задачи.

Submit(ForkJoinTask)

Отправляет forkJoinTask для выполнения.

Submit(ICallable)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от AbstractExecutorService)
Submit(IRunnable)

Отправляет задачу Runnable для выполнения и возвращает будущее, представляющее задачу.

(Унаследовано от AbstractExecutorService)
Submit(IRunnable, Object)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от AbstractExecutorService)
ToArray<T>()

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

IJavaPeerable.Disposed()

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
IJavaPeerable.DisposeUnlessReferenced()

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
IJavaPeerable.Finalized()

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
IJavaPeerable.JniManagedPeerState

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

An ExecutorService for running ForkJoinTasks.

(Унаследовано от Object)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

An ExecutorService for running ForkJoinTasks.

GetJniTypeName(IJavaPeerable)

An ExecutorService for running ForkJoinTasks.

AwaitTerminationAsync(IExecutorService, Int64, TimeUnit)

An ExecutorService for running ForkJoinTasks.

InvokeAnyAsync(IExecutorService, ICollection)

An ExecutorService for running ForkJoinTasks.

InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit)

An ExecutorService for running ForkJoinTasks.

Применяется к