ForkJoinPool クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
s ExecutorService
を実行 ForkJoinTask
するための 1 つ。
[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
- 継承
- 属性
注釈
s ExecutorService
を実行 ForkJoinTask
するための 1 つ。 A ForkJoinPool
は、クライアント以外ForkJoinTask
からの送信および管理および監視操作のエントリ ポイントを提供します。
他の種類とは異なるのはForkJoinPool
、主に em>work-stealing</em> を使用<することで異なります。プール内のすべてのスレッドは、プールに送信されたタスクや、他のアクティブなタスクによって作成されたタスクの検索と実行を試みます (存在しない場合は、最終的に作業の待機をブロックExecutorService
します)。 これにより、ほとんどのタスクが他のサブタスク (ほとんどの ForkJoinTask
タスクと同様) を生成する場合や、外部クライアントから多数の小さなタスクがプールに送信された場合に効率的な処理が可能になります。 特に、コンストラクターで em asyncMode</em> を true に設定<する場合は、ForkJoinPool
参加しないイベント スタイルのタスクで使用する場合にも s が適している場合>があります。 すべてのワーカー スレッドは set true
でThread#isDaemon
初期化されます。
静的 #commonPool()
は、ほとんどのアプリケーションで使用でき、適切です。 共通プールは、指定されたプールに明示的に送信されていない ForkJoinTask によって使用されます。 一般的なプールを使用すると、通常、リソースの使用量が削減されます (そのスレッドは、非使用期間中にゆっくりと回収され、その後の使用時に復元されます)。
個別のプールまたはカスタム プールを必要とするアプリケーションの場合、 ForkJoinPool
a は、指定されたターゲット並列処理レベルで構築できます。既定では、使用可能なプロセッサの数と同じです。 プールは、内部ワーカー スレッドを動的に追加、中断、または再開することで、一部のタスクが他のタスクへの参加を待機している間にストールしている場合でも、十分なアクティブ (または使用可能) スレッドを維持しようとします。 ただし、I/O またはその他のアンマネージ同期がブロックされている場合、このような調整は保証されません。 入れ子になった ManagedBlocker
インターフェイスを使用すると、対応する同期の種類を拡張できます。 既定のポリシーは、クラス ThreadPoolExecutor
に記載されているものに対応するパラメーターを持つコンストラクターを使用してオーバーライドできます。
このクラスには、実行およびライフサイクル制御メソッドに加えて、フォーク/参加アプリケーションの開発、チューニング、監視に役立つ状態チェック メソッド (たとえば #getStealCount
) が用意されています。 また、メソッド #toString
は、非公式の監視に便利な形式でプールの状態の兆候を返します。
他の ExecutorService の場合と同様に、次の表にまとめられた 3 つの主要なタスク実行メソッドがあります。 これらは主に、現在のプールでフォーク/結合の計算にまだ関与していないクライアントによって使用されるように設計されています。 これらのメソッドの主な形式は、インスタンスを 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"> Arrange async execution</th><td><#execute(ForkJoinTask)
/td><td>ForkJoinTask#fork
</td/td>><</tr><tr>th scope="row" style="text-align:left"> Await and obtain result</th><td><#invoke(ForkJoinTask)
/td>ForkJoinTask#invoke
<<>/td></tr tr<>><th scope="row" style="text-align:left"> Exec を配置し、Future</th><td<>#submit(ForkJoinTask)
/td 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
- クラス名を 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
スレッドを提供するファクトリを使用します。
これらの設定を確立する際にエラーが発生すると、既定のパラメーターが使用されます。 parallelism プロパティを 0 に設定するか、または返 null
される可能性があるファクトリを使用することで、共通プール内のスレッドの使用を無効または制限することができます。 ただし、これを行うと、結合されていないタスクが実行されない可能性があります。
<b>実装に関する注意事項:</b> この実装では、実行中のスレッドの最大数が 32767 に制限されます。 最大数 IllegalArgumentException
を超えるプールの作成を試みます。
この実装では、送信されたタスク (つまり、スロー RejectedExecutionException
) は、プールがシャットダウンされたとき、または内部リソースが使い果たされた場合にのみ拒否されます。
1.7 で追加されました。
の Java ドキュメントjava.util.concurrent.ForkJoinPool
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 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) |
s |
ForkJoinPool(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
ActiveThreadCount |
現在タスクを盗んでいる、または実行しているスレッドの数の見積もりを返します。 |
AsyncMode |
|
Class |
この |
CommonPoolParallelism |
共通プールの対象となる並列処理レベルを返します。 |
DefaultForkJoinWorkerThreadFactory |
新しい ForkJoinWorkerThread を作成します。 |
Factory |
新しいワーカーの構築に使用されるファクトリを返します。 |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
HasQueuedSubmissions |
|
IsQuiescent |
|
IsShutdown |
|
IsTerminated |
シャットダウン後 |
IsTerminating |
|
JniIdentityHashCode |
s |
JniPeerMembers |
s |
Parallelism |
このプールの対象となる並列処理レベルを返します。 |
PeerReference |
s |
PoolSize |
開始されたが、まだ終了していないワーカー スレッドの数を返します。 |
QueuedSubmissionCount |
まだ実行を開始していない、このプールに送信されたタスクの数の見積もりを返します。 |
QueuedTaskCount |
ワーカー スレッドによってキューに現在保持されているタスクの合計数の見積もりを返します (ただし、実行を開始していないプールに送信されたタスクは含まれません)。 |
RunningThreadCount |
タスクの参加またはその他のマネージド同期の待機中にブロックされないワーカー スレッドの数の見積もりを返します。 |
StealCount |
提出者以外のスレッドによって実行された完了したタスクの合計数の見積もりを返します。 |
ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
UncaughtExceptionHandler |
タスクの実行中に発生した回復不可能なエラーが原因で終了する内部ワーカー スレッドのハンドラーを返します。 |
メソッド
AwaitQuiescence(Int64, TimeUnit) |
このプールで動作している ForkJoinTask によって呼び出された場合、有効 |
AwaitTermination(Int64, TimeUnit) |
シャットダウン要求後にすべてのタスクの実行が完了するか、タイムアウトが発生するか、現在のスレッドが中断されるまでブロックします。どちらか早い方が発生します。 |
AwaitTerminationAsync(Int64, TimeUnit) |
s |
Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
CommonPool() |
共通プール インスタンスを返します。 |
Dispose() |
s |
Dispose(Boolean) |
s |
DrainTasksTo(ICollection<ForkJoinTask>) |
キューのスケジュール設定から、実行されていない送信済みタスクとフォーク済みタスクをすべて削除し、実行状態を変更せずに、指定されたコレクションに追加します。 |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
Execute(ForkJoinTask) |
指定されたタスクの (非同期) 実行を配置します。 |
Execute(IRunnable) | |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
Invoke(ForkJoinTask) |
指定されたタスクを実行し、完了時にその結果を返します。 |
InvokeAll(ICollection) |
s |
InvokeAll(ICollection, Int64, TimeUnit) |
s |
InvokeAny(ICollection) |
s |
InvokeAny(ICollection, Int64, TimeUnit) |
s |
JavaFinalize() |
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
ManagedBlock(ForkJoinPool+IManagedBlocker) |
特定のブロックしている可能性があるタスクを実行します。 |
NewTaskFor(ICallable) |
指定された呼び出し可能タスクの a |
NewTaskFor(IRunnable, Object) |
指定された実行可能値と既定値の a |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
PollSubmission() |
次に実行されていない申請が使用可能な場合は、削除して返します。 |
SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
Shutdown() |
以前に送信されたタスクが実行される順序付けされたシャットダウンを開始する可能性がありますが、新しいタスクは受け入れされません。 |
ShutdownNow() |
すべてのタスクを取り消したり停止したり、その後に送信されたすべてのタスクを拒否しようとしたりする可能性があります。 |
Submit(ForkJoinTask) |
ForkJoinTask を実行用に送信します。 |
Submit(ICallable) |
s |
Submit(IRunnable) |
実行可能タスクを実行用に送信し、そのタスクを表す Future を返します。 (継承元 AbstractExecutorService) |
Submit(IRunnable, Object) |
s |
ToArray<T>() |
s |
ToString() |
オブジェクトの文字列表現を返します。 (継承元 Object) |
UnregisterFromRuntime() |
s |
Wait() |
現在のスレッドが目覚めるまで待機させます。通常<は、通知<>/em> または <em>割り込み/em> を受け<取ります。 (継承元 Object) |
Wait(Int64) |
現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
明示的なインターフェイスの実装
IJavaPeerable.Disposed() |
s |
IJavaPeerable.DisposeUnlessReferenced() |
s |
IJavaPeerable.Finalized() |
s |
IJavaPeerable.JniManagedPeerState |
s |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
s |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
s |
IJavaPeerable.SetPeerReference(JniObjectReference) |
s |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
s |
GetJniTypeName(IJavaPeerable) |
s |
AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
s |
InvokeAnyAsync(IExecutorService, ICollection) |
s |
InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
s |