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