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><li>java.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 включены, и не гарантируют сохранение значений java.lang.ThreadLocal переменных в задачах.
При возникновении ошибки при установке этих параметров используются параметры по умолчанию. Можно отключить или ограничить использование потоков в общем пуле, задав свойству параллелизма нулевое значение и (или) с помощью фабрики, которая может возвращать null. Однако это может привести к тому, что невыполненные задачи никогда не выполняются.
Добавлено в версии 1.7.
Java документации по java.util.concurrent.ForkJoinPool.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Конструкторы
| Имя. | Описание |
|---|---|
| ForkJoinPool() |
Создает параллелизм, равный |
| ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
Создает ForkJoinPool с заданными параметрами. |
| ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
|
| ForkJoinPool(Int32) |
|
| ForkJoinPool(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
| Имя. | Описание |
|---|---|
| ActiveThreadCount |
Возвращает оценку количества потоков, которые в настоящее время крадут или выполняют задачи. |
| AsyncMode |
Возвращает, |
| Class |
Возвращает класс среды выполнения этого |
| CommonPoolParallelism |
Возвращает целевой уровень параллелизма общего пула. |
| DefaultForkJoinWorkerThreadFactory |
Создает новый forkJoinWorkerThread. |
| Factory |
Возвращает фабрику, используемую для создания новых рабочих ролей. |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| HasQueuedSubmissions |
Возвращается |
| IsQuiescent |
Возвращает, |
| IsShutdown |
Возвращает значение |
| IsTerminated |
Возвращает, |
| IsTerminating |
Возвращается |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
An |
| JniPeerMembers |
An |
| Parallelism |
Возвращает целевой уровень параллелизма этого пула. |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| 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) |
| Close() |
Если это не так |
| CommonPool() |
Возвращает общий экземпляр пула. |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
An |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
An |
| DrainTasksTo(ICollection<ForkJoinTask>) |
Удаляет все доступные неисправные отправленные и вилированные задачи из очередей планирования и добавляет их в указанную коллекцию без изменения состояния выполнения. |
| Equals(Object) |
An |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| Execute(ForkJoinTask) |
Упорядочивает (асинхронное) выполнение заданной задачи. |
| Execute(IRunnable) | |
| ExternalSubmit(ForkJoinTask) |
Отправляет заданную задачу, как если бы она была отправлена из клиента, не |
| GetHashCode() |
Возвращает хэш-значение кода для объекта. (Унаследовано от Object) |
| Invoke(ForkJoinTask) |
Выполняет заданную задачу, возвращая результат после завершения. |
| InvokeAll(ICollection, Int64, TimeUnit) |
Выполняет заданные задачи, возвращая список фьючерсов, содержащих их состояние и результаты, когда все завершено или истекает время ожидания, в зависимости от того, что происходит в первую очередь. (Унаследовано от AbstractExecutorService) |
| InvokeAll(ICollection) |
Выполняет заданные задачи, возвращая список фьючерсов, содержащих их состояние и результаты при завершении. (Унаследовано от AbstractExecutorService) |
| InvokeAny(ICollection, Int64, TimeUnit) |
Выполняет заданные задачи, возвращая результат успешно выполненного (т. е. без исключения), если он выполняется до истечения заданного времени ожидания. (Унаследовано от AbstractExecutorService) |
| InvokeAny(ICollection) |
Выполняет заданные задачи, возвращая результат успешно выполненного (т. е. без исключения), если это делается. (Унаследовано от AbstractExecutorService) |
| JavaFinalize() |
Устаревшие.
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| LazySubmit(ForkJoinTask) |
Отправляет данную задачу, не гарантируя, что она в конечном итоге будет выполняться в отсутствие доступных активных потоков. |
| ManagedBlock(ForkJoinPool+IManagedBlocker) |
Выполняет заданную, возможно, блокировку задачи. |
| NewTaskFor(ICallable) |
|
| NewTaskFor(IRunnable, Object) |
|
| Notify() |
Просыпается один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| PollSubmission() |
Удаляет и возвращает следующую неисследованную отправку, если она доступна. |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetParallelism(Int32) |
Изменяет целевой параллелизм этого пула, управляя будущим созданием, использованием и завершением рабочих потоков. |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
An |
| Shutdown() |
Возможно, инициируется упорядоченное завершение работы, в которой выполняются ранее отправленные задачи, но новые задачи не будут приняты. |
| ShutdownNow() |
Возможно, пытается отменить и(или) остановить все задачи и отклонить все последующие отправленные задачи. |
| Submit(ForkJoinTask) |
Отправляет forkJoinTask для выполнения. |
| Submit(ICallable) |
Отправляет задачу возврата значений для выполнения и возвращает будущее, представляющее ожидающие результаты задачи. (Унаследовано от AbstractExecutorService) |
| Submit(IRunnable, Object) |
Отправляет задачу Runnable для выполнения и возвращает будущее, представляющее задачу. (Унаследовано от AbstractExecutorService) |
| Submit(IRunnable) |
Отправляет задачу Runnable для выполнения и возвращает будущее, представляющее задачу. (Унаследовано от AbstractExecutorService) |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя. | Описание |
|---|---|
| IJavaPeerable.Disposed() |
An |
| IJavaPeerable.Finalized() |
An |
| IJavaPeerable.JniObjectReferenceControlBlock |
An |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
An |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
An |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
An |
| IJavaPeerable.UnregisterFromRuntime() |
An |
Методы расширения
| Имя. | Описание |
|---|---|
| AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
An |
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
An |
| InvokeAnyAsync(IExecutorService, ICollection) |
An |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
An |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |