ForkJoinPool 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
一个 ExecutorService
用于运行的 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
- 继承
- 属性
注解
一个 ExecutorService
用于运行的 ForkJoinTask
s。 A ForkJoinPool
提供来自非ForkJoinTask
客户端的提交以及管理和监视操作的入口点。
ForkJoinPool
与其他类型的ExecutorService
区别主要在于使用 <em>work-stealing</em>:池中的所有线程都尝试查找和执行提交到池和/或由其他活动任务创建的任务(最终阻止等待工作(如果不存在)。 当大多数任务生成其他子任务(与大多数 ForkJoinTask
任务一样),以及从外部客户端提交到池时,这可以实现高效的处理。 特别是在构造函数中将 <em>asyncMode</em> 设置为 true 时, ForkJoinPool
s 也可能适合用于从未联接的事件样式任务。 所有工作线程都使用 Thread#isDaemon
set true
初始化。
静态 #commonPool()
是可用的,适用于大多数应用程序。 未显式提交到指定池的任何 ForkJoinTask 使用通用池。 使用通用池通常会减少资源使用率(其线程在非使用期间缓慢回收,并在后续使用时恢复)。
对于需要单独池或自定义池的应用程序,可以使用给定的目标并行度级别构造一个 ForkJoinPool
;默认情况下,等于可用处理器的数量。 池会尝试通过动态添加、挂起或恢复内部工作线程来维护足够的活动(或可用)线程,即使某些任务已停止等待加入其他线程。 但是,面对被阻止的 I/O 或其他非托管同步,无法保证进行此类调整。 嵌套 ManagedBlocker
接口支持扩展所容纳的同步类型。 可以使用具有与类 ThreadPoolExecutor
中记录的参数相对应的构造函数重写默认策略。
除了执行和生命周期管理方法之外,此类还提供状态检查方法(例如 #getStealCount
),这些方法旨在帮助开发、优化和监视分支/联接应用程序。 此外,方法 #toString
以方便的形式返回池状态的指示,以便进行非正式监视。
与其他 ExecutorServices 一样,下表汇总了三种主要任务执行方法。 这些设计主要用于客户端尚未参与当前池中的分叉/联接计算。 这些方法的主要形式接受 ForkJoinTask
实例,但重载形式也允许混合执行纯 Runnable
活动或 Callable
基于活动。 但是,在池中执行的任务通常应该改用表中所列的计算表单,除非使用通常未联接的异步事件样式任务,在这种情况下,方法的选择没有什么区别。
<table class=“plain”><caption task execution methods</caption><>tr<>td/td><>< th scope=“col”> Call from non-fork/join clients</th<>scope=“col”> Call from within fork/join computations</th<>/tr><tr<>th scope=“row” style=“text-align:left”> Arrange async execution</th><td<>#execute(ForkJoinTask)
/td><td>ForkJoinTask#fork
<></tr><tr>th scope=“row” style=“text-align:left”> Await and get result</th><td><#invoke(ForkJoinTask)
/td td>>ForkJoinTask#invoke
<</<>tr tr>><<th scope=“row” style=“text-align:left”> Arrange exec and get Future/th<>td/td<>tdForkJoinTask#fork
> (ForkJoinTasks <em>are</em> Futures<)</td>><#submit(ForkJoinTask)
</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
- a UncaughtExceptionHandler
的类名。 ClassLoader#getSystemClassLoader() 系统类加载程序用于加载此类。 <li>java.util.concurrent.ForkJoinPool.common.maximumSpares
- 允许的额外线程的最大数目以保持目标并行度(默认值 256)。 </ul> 如果未通过系统属性提供线程工厂,则公共池使用将系统类加载程序用作 Thread#getContextClassLoader() 线程上下文类加载程序的工厂。 此外,如果存在, SecurityManager
则公共池使用未 Permissions
启用的工厂提供线程。
在建立这些设置时出现任何错误时,将使用默认参数。 可以通过将并行度属性设置为零以及/或使用可能返回 null
的工厂来禁用或限制公共池中的线程的使用。 但是,这样做可能会导致永远不会执行未加入的任务。
<b>实现说明:</b> 此实现将运行线程的最大数目限制为 32767。 尝试创建大于最大数目结果 IllegalArgumentException
的池。
仅当池关闭或内部资源耗尽时,此实现才会拒绝提交的任务(即引发 RejectedExecutionException
)。
已在 1.7 中添加。
适用于 . 的 java.util.concurrent.ForkJoinPool
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
构造函数
ForkJoinPool() |
为所有其他参数创建一个 |
ForkJoinPool(Int32) |
|
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
|
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
一个 |
ForkJoinPool(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
属性
ActiveThreadCount |
返回当前正在窃取或正在执行任务的线程数的估计值。 |
AsyncMode |
如果 |
Class |
返回此 |
CommonPoolParallelism |
返回公共池的目标并行度级别。 |
DefaultForkJoinWorkerThreadFactory |
创建新的 ForkJoinWorkerThread。 |
Factory |
返回用于构造新辅助角色的工厂。 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
HasQueuedSubmissions |
|
IsQuiescent |
返回 |
IsShutdown |
返回 |
IsTerminated |
如果所有任务在关闭后都已完成,则返回 |
IsTerminating |
如果终止过程已开始但尚未完成,则返回 |
JniIdentityHashCode |
一个 |
JniPeerMembers |
一个 |
Parallelism |
返回此池的目标并行度级别。 |
PeerReference |
一个 |
PoolSize |
返回已启动但尚未终止的工作线程数。 |
QueuedSubmissionCount |
返回已提交到此池的任务数的估计值,这些任务尚未开始执行。 |
QueuedTaskCount |
返回工作线程当前在队列中保存的任务总数的估计值(但不包括提交到尚未开始执行的池的任务)。 |
RunningThreadCount |
返回未阻止等待加入任务或其他托管同步的工作线程数的估计值。 |
StealCount |
返回由提交者以外的线程执行的已完成任务的总数的估计值。 |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
UncaughtExceptionHandler |
返回由于执行任务时遇到的不可恢复错误而终止的内部工作线程的处理程序。 |
方法
AwaitQuiescence(Int64, TimeUnit) |
如果由在此池中运行的 ForkJoinTask 调用,则等效于 |
AwaitTermination(Int64, TimeUnit) |
阻止,直到所有任务在关闭请求后完成执行,或者超时发生,或者当前线程中断,以先发生。 |
AwaitTerminationAsync(Int64, TimeUnit) |
一个 |
Clone() |
创建并返回此对象的副本。 (继承自 Object) |
CommonPool() |
返回公共池实例。 |
Dispose() |
一个 |
Dispose(Boolean) |
一个 |
DrainTasksTo(ICollection<ForkJoinTask>) |
从计划队列中删除所有可用的未执行任务和分叉任务,并将其添加到给定集合,而无需更改其执行状态。 |
Equals(Object) |
指示其他对象是否“等于”此对象。 (继承自 Object) |
Execute(ForkJoinTask) |
安排给定任务的(异步)执行。 |
Execute(IRunnable) | |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
Invoke(ForkJoinTask) |
执行给定的任务,并在完成时返回其结果。 |
InvokeAll(ICollection) |
一个 |
InvokeAll(ICollection, Int64, TimeUnit) |
一个 |
InvokeAny(ICollection) |
一个 |
InvokeAny(ICollection, Int64, TimeUnit) |
一个 |
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) |
一个 |
Submit(IRunnable) |
提交可运行的任务以供执行,并返回表示该任务的 Future。 (继承自 AbstractExecutorService) |
Submit(IRunnable, Object) |
一个 |
ToArray<T>() |
一个 |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
UnregisterFromRuntime() |
一个 |
Wait() |
使当前线程等待,直到唤醒它,通常是通过 em 通知/em> 或 <em>interrupted</em>。<>< (继承自 Object) |
Wait(Int64) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。 (继承自 Object) |
Wait(Int64, Int32) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。 (继承自 Object) |
显式接口实现
IJavaPeerable.Disposed() |
一个 |
IJavaPeerable.DisposeUnlessReferenced() |
一个 |
IJavaPeerable.Finalized() |
一个 |
IJavaPeerable.JniManagedPeerState |
一个 |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
一个 |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一个 |
IJavaPeerable.SetPeerReference(JniObjectReference) |
一个 |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
一个 |
GetJniTypeName(IJavaPeerable) |
一个 |
AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
一个 |
InvokeAnyAsync(IExecutorService, ICollection) |
一个 |
InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
一个 |