- java.lang.Object
-
- java.util.concurrent.AbstractExecutorService
-
- java.util.concurrent.ForkJoinPool
-
- すべての実装されたインタフェース:
Executor
,ExecutorService
public class ForkJoinPool extends AbstractExecutorService
ForkJoinTask
を実行するためのExecutorService
。ForkJoinPool
は、ForkJoinTask
以外のクライアントからの送信のほか、管理および監視操作のためのエントリ・ポイントを提供します。ForkJoinPool
は、主にwork-stealingを使用する点で、他の種類のExecutorService
とは異なります。プール内のすべてのスレッドが、プールに送信されたタスク、他のアクティブなタスクによって作成されたタスク、あるいはその両方を見つけて実行しようとします(1つも存在しない場合は、最終的に作業の待機がブロックされます)。 これにより、(ほとんどのForkJoinTask
と同様に)ほとんどのタスクが他のサブタスクを生成する場合や、外部のクライアントからプールに小さいタスクが数多く送信される場合に、効率的な処理が可能になります。 特に、コンストラクタでasyncModeをtrueに設定した場合、ForkJoinPool
は結合されないイベント形式のタスクでの使用にも適している可能性があります。 すべてのワーカー・スレッドは、Thread.isDaemon()
settrue
で初期化されます。静的
commonPool()
が利用可能であり、ほとんどの適用に適しています。 共通プールは、指定されたプールに明示的に送信されないForkJoinTaskで使用されます。 共通プールを使用すると、通常はリソースの使用量が減少します(そのスレッドは未使用時にゆっくりと回収され、その後の使用時に復帰します)。個別または独自のプールを必要とする適用では、特定のターゲット並列性レベル(デフォルトでは使用可能なプロセッサの数と同じ)で
ForkJoinPool
を構築できます。 このプールは、一部のタスクがほかのタスクの結合を待機して停止している場合でも、内部ワーカー・スレッドを動的に追加、中断、または再開することによって、十分な数のアクティブな(または使用可能な)スレッドを維持しようとします。 ただし、ブロックされた入出力やその他の管理されていない同期が存在する場合、このような調整は保証されません。 ネストされたForkJoinPool.ManagedBlocker
インタフェースを使用すると、対応可能な同期の種類を拡張できます。 デフォルトのポリシーは、クラスThreadPoolExecutor
に記述されているパラメータに対応するパラメータを持つコンストラクタを使用してオーバーライドできます。実行およびライフ・サイクル制御メソッドに加えて、このクラスは、分岐/結合アプリケーションの開発、チューニング、および監視を支援することを目的にしたステータス・チェック・メソッド(たとえば
getStealCount()
)を提供します。 また、toString()
メソッドも、プール状態の指示を非公式の監視に便利な形式で返します。ほかのExecutorServiceと同様に、次の表に要約されている3つの主なタスク実行メソッドがあります。 これらは主に、現在のプール内の分岐/結合計算にまだ関与していないクライアントによって使用されるように設計されています。 これらのメソッドのメインの形式は
ForkJoinTask
のインスタンスを受け入れますが、オーバーロードされた形式では、プレーンなRunnable
またはCallable
ベースのアクティビティの混在実行も許可されます。 ただし、すでにプール内で実行されているタスクでは、通常結合されない非同期イベント形式のタスクを使用しないかぎり、通常はかわりにこの表に示されている計算内の形式を使用するようにしてください。その場合、選択するメソッドに違いはほとんどありません。タスク実行メソッドのサマリー 分岐/結合以外のクライアントからの呼び出し 分岐/結合計算内からの呼び出し 非同期実行の調整 execute(ForkJoinTask)
ForkJoinTask.fork()
結果の待機および取得 invoke(ForkJoinTask)
ForkJoinTask.invoke()
実行の調整およびFutureの取得 submit(ForkJoinTask)
ForkJoinTask.fork()
(ForkJoinTask は Future)共通プールを構築するために使用されるパラメータは、次のシステム・プロパティを設定することで制御できます:
java.util.concurrent.ForkJoinPool.common.parallelism
- 並列度レベル(負でない整数)java.util.concurrent.ForkJoinPool.common.threadFactory
-ForkJoinPool.ForkJoinWorkerThreadFactory
のクラス名。 「システム・クラス・ローダー」はこのクラスのロードに使用されます。java.util.concurrent.ForkJoinPool.common.exceptionHandler
-Thread.UncaughtExceptionHandler
のクラス名。 「システム・クラス・ローダー」はこのクラスのロードに使用されます。java.util.concurrent.ForkJoinPool.common.maximumSpares
- ターゲット並列処理を維持するために許容される余分なスレッドの最大数(デフォルトは256)。
SecurityManager
が存在する場合、共通プールは、Permissions
が有効になっていないスレッドを提供するファクトリを使用します。 これらの設定時にエラーが発生した場合は、デフォルト・パラメータが使用されます。 並列性プロパティをゼロに設定するか、null
を返すことができるファクトリを使用するか、あるいはその両方によって、共通プール内のスレッドの使用を無効化または制限できます。 ただし、その場合は、結合されていないタスクがまったく実行されなくなる可能性があります。実装上の注意: この実装では、実行中のスレッドの最大数を32767に制限します。 最大数を超えるプールを作成しようとすると、
IllegalArgumentException
が発生します。この実装では、送信されたタスクを(
RejectedExecutionException
をスローすることによって)拒否するのは、プールがシャットダウンされているか、または内部リソースが使い果たされた場合だけです。- 導入されたバージョン:
- 1.7
-
-
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 クラス 説明 static interface
ForkJoinPool.ForkJoinWorkerThreadFactory
新しいForkJoinWorkerThread
を作成するためのファクトリです。static interface
ForkJoinPool.ManagedBlocker
ForkJoinPool
内で実行中のタスクについての管理対象の並列性を拡張するためのインタフェースです。
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static ForkJoinPool.ForkJoinWorkerThreadFactory
defaultForkJoinWorkerThreadFactory
新しいForkJoinWorkerThreadを作成します。
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型 メソッド 説明 boolean
awaitQuiescence(long timeout, TimeUnit unit)
このプール内で動作するForkJoinTaskから呼び出した場合は、ForkJoinTask.helpQuiesce()
と同じ効果があります。boolean
awaitTermination(long timeout, TimeUnit unit)
シャットダウン要求後にすべてのタスクが実行を完了していたか、タイム・アウトが発生するか、現在のスレッドで割込みが発生するか、そのいずれかが最初に発生するまでブロックします。static ForkJoinPool
commonPool()
共通プール・インスタンスを返します。protected int
drainTasksTo(Collection<? super ForkJoinTask<?>> c)
実行されなかった、送信およびフォークされた使用可能なすべてのタスクをスケジュール・キューから削除し、実行ステータスを変更せずにそれらを指定されたコレクションに追加します。void
execute(Runnable task)
将来のどの時点かで、指定されたコマンドを実行します。void
execute(ForkJoinTask<?> task)
指定されたタスクの(非同期)実行を調整します。int
getActiveThreadCount()
現在タスクを横取りまたは実行しているスレッドの推定数を返します。boolean
getAsyncMode()
結合されないフォークされたタスクについて、このプールがローカルの先入れ先出しスケジュール・モードを使用している場合、true
を返します。static int
getCommonPoolParallelism()
共通プールのターゲット並列性レベルを返します。ForkJoinPool.ForkJoinWorkerThreadFactory
getFactory()
新規ワーカーの構築に使用されるファクトリを返します。int
getParallelism()
このプールのターゲット並列性レベルを返します。int
getPoolSize()
開始したがまだ終了していないワーカー・スレッド数を返します。int
getQueuedSubmissionCount()
このプールに送信された、まだ実行が開始されていないタスクの推定数を返します。long
getQueuedTaskCount()
ワーカー・スレッドによって現在キューに保持されているタスクの総数の推定値を返します(プールに送信された、まだ開始されていないタスクは含まない)。int
getRunningThreadCount()
タスクの結合またはその他の管理対象同期の待機をブロックしない、ワーカー・スレッドの推定数を返します。long
getStealCount()
1つのスレッドのワーク・キューから別のスレッドによって横取りされたタスクの総数の推定値を返します。Thread.UncaughtExceptionHandler
getUncaughtExceptionHandler()
タスクを実行中に発生した回復不能なエラーが原因で終了した内部ワーカー・スレッド用のハンドラを返します。boolean
hasQueuedSubmissions()
このプールに送信された、まだ実行が開始されていないタスクがある場合はtrue
を返します。<T> T
invoke(ForkJoinTask<T> task)
指定されたタスクを実行し、完了時にその結果を返します。<T> List<Future<T>>
invokeAll(Collection<? extends Callable<T>> tasks)
指定されたタスクを実行し、すべて完了すると、ステータスと結果を含むFutureのリストを返します。boolean
isQuiescent()
すべてのワーカー・スレッドが現在アイドル状態の場合にtrue
を返します。boolean
isShutdown()
このプールがシャットダウンしていた場合、true
を返します。boolean
isTerminated()
シャットダウンに続いてすべてのタスクが完了していた場合、true
を返します。boolean
isTerminating()
終了処理が開始されたがまだ完了していない場合、true
を返します。static void
managedBlock(ForkJoinPool.ManagedBlocker blocker)
指定された潜在的なブロック・タスクを実行します。protected ForkJoinTask<?>
pollSubmission()
まだ実行されていない次の送信が使用可能な場合、それを削除して復帰します。void
shutdown()
可能であれば、順序正しくシャットダウンを開始します。以前に送信されたタスクは実行されますが、新規タスクは受け入れられません。List<Runnable>
shutdownNow()
可能であれば、すべてのタスクの取消しまたは停止(あるいはその両方)を行い、後で送信されたすべてのタスクを拒否することを試みます。ForkJoinTask<?>
submit(Runnable task)
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。<T> ForkJoinTask<T>
submit(Runnable task, T result)
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。<T> ForkJoinTask<T>
submit(Callable<T> task)
値を返す実行用タスクを送信して、保留状態のタスク結果を表すFutureを返します。<T> ForkJoinTask<T>
submit(ForkJoinTask<T> task)
実行用のForkJoinTaskを送信します。String
toString()
実行状態、並列性レベル、およびワーカーおよびタスク・カウントの指示を含めて、このプールおよびその状態を識別する文字列を返します。-
クラス java.util.concurrent.AbstractExecutorServiceで宣言されたメソッド
newTaskFor, newTaskFor
-
クラス java.lang.Objectで宣言されたメソッド
clone、equals、finalize、getClass、hashCode、notify、notifyAll、wait、wait、wait
-
インタフェース java.util.concurrent.ExecutorServiceで宣言されたメソッド
invokeAll, invokeAny, invokeAny
-
-
-
-
フィールドの詳細
-
defaultForkJoinWorkerThreadFactory
public static final ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory
新しいForkJoinWorkerThreadを作成します。 このファクトリは、ForkJoinPoolコンストラクタでオーバーライドされないかぎり使用されます。
-
-
コンストラクタの詳細
-
ForkJoinPool
public ForkJoinPool()
他のすべてのパラメータ(ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)
を参照してください)のデフォルトを使用して、Runtime.availableProcessors()
に等しい並列性を持つForkJoinPool
を作成します。- 例外:
SecurityException
- セキュリティ・マネージャが存在し、呼出し元がRuntimePermission
("modifyThread")
を持たないためスレッドを変更できない場合
-
ForkJoinPool
public ForkJoinPool(int parallelism)
他のすべてのパラメータ(ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)
を参照してください)のデフォルトを使用して、示された並列レベルでForkJoinPool
を作成します。- パラメータ:
parallelism
- 並列性レベル- 例外:
IllegalArgumentException
- 並列性がゼロ以下か、実装限界より大きいSecurityException
- セキュリティ・マネージャが存在し、呼出し元がRuntimePermission
("modifyThread")
を持たないためスレッドを変更できない場合
-
ForkJoinPool
public ForkJoinPool(int parallelism, ForkJoinPool.ForkJoinWorkerThreadFactory factory, Thread.UncaughtExceptionHandler handler, boolean asyncMode)
指定されたパラメータ(他の人にデフォルトを使用--ForkJoinPool(int, ForkJoinWorkerThreadFactory, UncaughtExceptionHandler, boolean, int, int, int, Predicate, long, TimeUnit)
を参照してください)でForkJoinPool
を作成します。- パラメータ:
parallelism
- 並列性レベル。 デフォルト値の場合、Runtime.availableProcessors()
を使用します。factory
- 新しいスレッドを作成するためのファクトリ。 デフォルト値の場合、defaultForkJoinWorkerThreadFactory
を使用します。handler
- タスクの実行中に検出された回復不可能なエラーのために終了する内部ワーカー・スレッドのためのハンドラ。 デフォルト値の場合、null
を使用します。asyncMode
- trueの場合は、結合されないフォークされたタスクに対して、ローカルの先入れ先出しスケジュール・モードを確立する。 このモードは、ワーカー・スレッドがイベント形式の非同期タスクのみを処理するアプリケーションでは、デフォルトのローカルのスタック・ベース・モードより適している場合がある。 デフォルト値の場合、false
を使用します。- 例外:
IllegalArgumentException
- 並列性がゼロ以下か、実装限界より大きいNullPointerException
- ファクトリがnullの場合SecurityException
- セキュリティ・マネージャが存在し、呼出し元がRuntimePermission
("modifyThread")
を持たないためスレッドを変更できない場合
-
ForkJoinPool
public ForkJoinPool(int parallelism, ForkJoinPool.ForkJoinWorkerThreadFactory factory, Thread.UncaughtExceptionHandler handler, boolean asyncMode, int corePoolSize, int maximumPoolSize, int minimumRunnable, Predicate<? super ForkJoinPool> saturate, long keepAliveTime, TimeUnit unit)
指定されたパラメータを使ってForkJoinPool
を作成します。- パラメータ:
parallelism
- 並列性レベル。 デフォルト値の場合、Runtime.availableProcessors()
を使用します。factory
- 新しいスレッドを作成するためのファクトリ。 デフォルト値の場合、defaultForkJoinWorkerThreadFactory
を使用します。handler
- タスクの実行中に検出された回復不可能なエラーのために終了する内部ワーカー・スレッドのためのハンドラ。 デフォルト値の場合、null
を使用します。asyncMode
- trueの場合は、結合されないフォークされたタスクに対して、ローカルの先入れ先出しスケジュール・モードを確立する。 このモードは、ワーカー・スレッドがイベント形式の非同期タスクのみを処理するアプリケーションでは、デフォルトのローカルのスタック・ベース・モードより適している場合がある。 デフォルト値の場合、false
を使用します。corePoolSize
- プール内に保持するスレッドの数(経過したキープアライブ後にタイムアウトしない限り)。 通常、(デフォルトで)この値は並列レベルと同じ値ですが、タスクが定期的にブロックされると動的オーバーヘッドを減らすために大きな値に設定されます。 より小さい値の(例えば0
)を使用すると、デフォルトと同じ効果があります。maximumPoolSize
- 許容されるスレッドの最大数。 最大値に達すると、ブロックされたスレッドの置換が失敗します。 (ただし、異なるスレッドの作成と終了が重複し、特定のスレッド・ファクトリによって管理される可能性があるため、この値は一時的に超過することがあります。) 共通プールにデフォルトで使用されているのと同じ値を設定するには、256
とparallelism
レベルを使用します。 (デフォルトでは、共通プールは最大256のスペア・スレッドを許可します。) 実装全体のスレッド制限より大きい値(例えばInteger.MAX_VALUE
)を使用すると、この制限値(これはデフォルトです)を使用するのと同じ効果があります。minimumRunnable
- joinまたはForkJoinPool.ManagedBlocker
によってブロックされないコア・スレッドの最小許容数。 進捗を確実にするために、ブロックされていないスレッドが少なすぎて未実行のタスクが存在する場合、指定されたmaximumPoolSizeまで新しいスレッドが構築されます。 デフォルト値は、1
を使用してください。 値を大きくすると、ブロックされたアクティビティがある場合にスループットが向上する可能性がありますが、オーバーヘッドが増えるためそうではありません。 送信されたタスクが、追加のスレッドを必要とする依存関係を持つことができない場合、ゼロの値は許容可能です。saturate
- 非nullの場合、最大許容スレッド数を超えて作成しようとすると呼び出される述語。 デフォルトでは、スレッドがjoinまたはForkJoinPool.ManagedBlocker
でブロックしようとしているが、maximumPoolSizeを超えて置換できない場合は、RejectedExecutionException
がスローされます。 しかし、この述語がtrue
を返した場合、例外はスローされないため、プールは実行可能スレッドの目標数よりも少ない数で実行され続けます。keepAliveTime
- スレッドが終了する前の最後の使用からの経過時間(必要に応じて後で交換)。 デフォルト値は、60, TimeUnit.SECONDS
を使用してください。unit
-keepAliveTime
引数の時間単位- 例外:
IllegalArgumentException
- 並列性がゼロ以下、または実装の制限より大きい場合、またはmaximumPoolSizeが並列性よりも小さい場合、keepAliveTimeがゼロ以下である場合。NullPointerException
- ファクトリがnullの場合SecurityException
- セキュリティ・マネージャが存在し、呼出し元がRuntimePermission
("modifyThread")
を持たないためスレッドを変更できない場合- 導入されたバージョン:
- 9
-
-
メソッドの詳細
-
commonPool
public static ForkJoinPool commonPool()
共通プール・インスタンスを返します。 このプールは静的に構築されます。shutdown()
またはshutdownNow()
を試行しても、その実行状態には影響しません。 ただし、このプールおよび実行中の処理は、System.exit(int)
プログラムで自動的に終了します。 プログラムの終了前に非同期タスクの処理が完了することに依存するプログラムは、終了前にcommonPool().
awaitQuiescence
を呼び出す必要があります。- 戻り値:
- 共通プール・インスタンス
- 導入されたバージョン:
- 1.8
-
invoke
public <T> T invoke(ForkJoinTask<T> task)
指定されたタスクを実行し、完了時にその結果を返します。 計算で非チェック例外またはエラーが発生した場合は、それが、この呼出しの結果として再スローされます。 再スローされた例外は通常の例外と同じように動作しますが、可能な場合は、現在のスレッドと実際に例外が発生しているスレッドの両方(最小限としては後者のみ)の(たとえば、ex.printStackTrace()
を使用して表示された)スタック・トレースを含みます。- 型パラメータ:
T
- タスクの結果の型- パラメータ:
task
- タスク- 戻り値:
- タスクの結果
- 例外:
NullPointerException
- タスクがnullの場合RejectedExecutionException
- タスクの実行をスケジュールできない場合
-
execute
public void execute(ForkJoinTask<?> task)
指定されたタスクの(非同期)実行を調整します。- パラメータ:
task
- タスク- 例外:
NullPointerException
- タスクがnullの場合RejectedExecutionException
- タスクの実行をスケジュールできない場合
-
execute
public void execute(Runnable task)
インタフェースからコピーされた説明:Executor
将来のどの時点かで、指定されたコマンドを実行します。 コマンドは、新規スレッド内でも、プールされたスレッド内でも、呼出し側のスレッド内でも、Executor
実装により随意に実行できます。- パラメータ:
task
- 実行可能なタスク- 例外:
NullPointerException
- タスクがnullの場合RejectedExecutionException
- タスクの実行をスケジュールできない場合
-
submit
public <T> ForkJoinTask<T> submit(ForkJoinTask<T> task)
実行用のForkJoinTaskを送信します。- 型パラメータ:
T
- タスクの結果の型- パラメータ:
task
- 送信するタスク- 戻り値:
- タスク
- 例外:
NullPointerException
- タスクがnullの場合RejectedExecutionException
- タスクの実行をスケジュールできない場合
-
submit
public <T> ForkJoinTask<T> submit(Callable<T> task)
インタフェースからコピーされた説明:ExecutorService
値を返す実行用タスクを送信して、保留状態のタスク結果を表すFutureを返します。 Futureのget
メソッドは、正常に完了した時点でタスクの結果を返します。タスクの待機をただちにブロックする場合は、
result = exec.submit(aCallable).get();
の形式の構築を使用できます。注:
Executors
クラスには、クロージャに似たほかの一般オブジェクトを変換できるメソッド・セットが含まれます。たとえば、PrivilegedAction
をCallable
形式に変換して、送信可能にすることができます。- 定義:
submit
、インタフェース:ExecutorService
- オーバーライド:
submit
、クラス:AbstractExecutorService
- 型パラメータ:
T
- タスクの結果の型- パラメータ:
task
- 送信するタスク- 戻り値:
- タスクの保留完了を表すFuture
- 例外:
NullPointerException
- タスクがnullの場合RejectedExecutionException
- タスクの実行をスケジュールできない場合
-
submit
public <T> ForkJoinTask<T> submit(Runnable task, T result)
インタフェースからコピーされた説明:ExecutorService
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。 Futureのget
メソッドは、正常に完了した時点で指定された結果を返します。- 定義:
submit
、インタフェース:ExecutorService
- オーバーライド:
submit
、クラス:AbstractExecutorService
- 型パラメータ:
T
- 結果の型- パラメータ:
task
- 送信するタスクresult
- 返す結果- 戻り値:
- タスクの保留完了を表すFuture
- 例外:
NullPointerException
- タスクがnullの場合RejectedExecutionException
- タスクの実行をスケジュールできない場合
-
submit
public ForkJoinTask<?> submit(Runnable task)
インタフェースからコピーされた説明:ExecutorService
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。 Futureのget
メソッドは、正常に
完了した時点でnullを返します。- 定義:
submit
、インタフェース:ExecutorService
- オーバーライド:
submit
、クラス:AbstractExecutorService
- パラメータ:
task
- 送信するタスク- 戻り値:
- タスクの保留完了を表すFuture
- 例外:
NullPointerException
- タスクがnullの場合RejectedExecutionException
- タスクの実行をスケジュールできない場合
-
invokeAll
public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
インタフェースからコピーされた説明:ExecutorService
指定されたタスクを実行し、すべて完了すると、ステータスと結果を含むFutureのリストを返します。 返されるリストの各要素に対してFuture.isDone()
はtrue
になります。 完了したタスクは、通常どおりか例外をスローすることで終了しています。 オペレーションの進行中に、指定されたコレクションが変更された場合、このメソッドの結果は定義されていません。- 型パラメータ:
T
- タスクから返される値の型- パラメータ:
tasks
- タスクのコレクション- 戻り値:
- タスクを表すFutureのリスト。リストの順序は、指定されたタスク・リストのイテレータにより生成される順序と同じで、各タスクは完了済みです。
- 例外:
NullPointerException
- タスクまたはそのいずれかの要素がnull
の場合RejectedExecutionException
- いずれかのタスクの実行をスケジュールできない場合
-
getFactory
public ForkJoinPool.ForkJoinWorkerThreadFactory getFactory()
新規ワーカーの構築に使用されるファクトリを返します。- 戻り値:
- 新しいワーカーの構築に使用されるファクトリ
-
getUncaughtExceptionHandler
public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
タスクを実行中に発生した回復不能なエラーが原因で終了した内部ワーカー・スレッド用のハンドラを返します。- 戻り値:
- ハンドラ。ない場合は
null
-
getParallelism
public int getParallelism()
このプールのターゲット並列性レベルを返します。- 戻り値:
- このプールのターゲット並列性レベル
-
getCommonPoolParallelism
public static int getCommonPoolParallelism()
共通プールのターゲット並列性レベルを返します。- 戻り値:
- 共通プールのターゲット並列性レベル
- 導入されたバージョン:
- 1.8
-
getPoolSize
public int getPoolSize()
開始したがまだ終了していないワーカー・スレッド数を返します。 このメソッドによって返された結果は、ほかのスレッドが協調してブロックされているときに並列性を維持するためにスレッドが作成された場合のgetParallelism()
とは異なる可能性があります。- 戻り値:
- ワーカー・スレッド数
-
getAsyncMode
public boolean getAsyncMode()
結合されないフォークされたタスクについて、このプールがローカルの先入れ先出しスケジュール・モードを使用している場合、true
を返します。- 戻り値:
- このプールが非同期モードを使用している場合は
true
-
getRunningThreadCount
public int getRunningThreadCount()
タスクの結合またはその他の管理対象同期の待機をブロックしない、ワーカー・スレッドの推定数を返します。 このメソッドは、実行中のスレッドの数を過大評価する可能性があります。- 戻り値:
- ワーカー・スレッド数
-
getActiveThreadCount
public int getActiveThreadCount()
現在タスクを横取りまたは実行しているスレッドの推定数を返します。 このメソッドは、アクティブなスレッドの数を過大評価する可能性があります。- 戻り値:
- アクティブなスレッドの数
-
isQuiescent
public boolean isQuiescent()
すべてのワーカー・スレッドが現在アイドル状態の場合にtrue
を返します。 アイドル・ワーカーとは、ほかのスレッドから横取りできるタスクがなく、プールへの保留中の送信も存在しないために、実行するタスクを取得できないワーカーのことです。 このメソッドは控えめです。すべてのスレッドがアイドルになってもすぐにはtrue
を返さない可能性がありますが、スレッドが非アクティブのままであれば、最終的にはtrueになります。- 戻り値:
- すべてのスレッドが現在アイドル状態の場合は
true
-
getStealCount
public long getStealCount()
1つのスレッドのワーク・キューから別のスレッドによって横取りされたタスクの総数の推定値を返します。 プールが静止していない場合、報告された値は、横取りの実際の総数を過小評価しています。 この値は、分岐/結合プログラムの監視やチューニングに役立つことがあります。一般に、横取りの数はスレッドのビジー状態を維持できるだけの十分に大きな値であるべきですが、スレッド間のオーバーヘッドや競合を回避できるだけの十分に小さな値でもあるべきです。- 戻り値:
- 横取りの数
-
getQueuedTaskCount
public long getQueuedTaskCount()
ワーカー・スレッドによって現在キューに保持されているタスクの総数の推定値を返します(プールに送信された、まだ開始されていないタスクは含まない)。 この値は、プール内のすべてのスレッドにわたって反復することによって取得された近似値に過ぎません。 このメソッドは、タスクの粒度のチューニングに役立つことがあります。- 戻り値:
- キューに入っているタスクの数
-
getQueuedSubmissionCount
public int getQueuedSubmissionCount()
このプールに送信された、まだ実行が開始されていないタスクの推定数を返します。 このメソッドは、送信の数に比例して時間がかかることがあります。- 戻り値:
- キューに入っている送信の数
-
hasQueuedSubmissions
public boolean hasQueuedSubmissions()
このプールに送信された、まだ実行が開始されていないタスクがある場合はtrue
を返します。- 戻り値:
- キューに入っている送信がない場合は
true
-
pollSubmission
protected ForkJoinTask<?> pollSubmission()
まだ実行されていない次の送信が使用可能な場合、それを削除して復帰します。 このメソッドは、複数のプールを含むシステムで作業を再割り当てする、このクラスへの拡張機能で役立つことがあります。- 戻り値:
- 次の送信。ない場合は
null
-
drainTasksTo
protected int drainTasksTo(Collection<? super ForkJoinTask<?>> c)
実行されなかった、送信およびフォークされた使用可能なすべてのタスクをスケジュール・キューから削除し、実行ステータスを変更せずにそれらを指定されたコレクションに追加します。 これらには、人為的に生成またはラップされたタスクが含まれる可能性があります。 このメソッドは、プールが静止していることがわかっている場合にのみ呼び出されるように設計されています。 その他のときに呼び出すと、すべてのタスクが削除されないことがあります。 コレクションc
に要素を追加しようとしているときに障害が検出されると、関連付けられた例外がスローされたときに、要素がどちらのコレクションにも存在しない場合と、どちらかまたは両方のコレクションに存在する場合があります。 オペレーションの進行中に、指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。- パラメータ:
c
- 要素の転送先のコレクション- 戻り値:
- 転送された要素の数
-
toString
public String toString()
実行状態、並列性レベル、およびワーカーおよびタスク・カウントの指示を含めて、このプールおよびその状態を識別する文字列を返します。
-
shutdown
public void shutdown()
可能であれば、順序正しくシャットダウンを開始します。以前に送信されたタスクは実行されますが、新規タスクは受け入れられません。 これがcommonPool()
である場合は、呼び出しても実行状態に影響しません。また、シャットダウン後に呼び出しても効果はありません。 このメソッドの実行中に同時に送信されているタスクは拒否される場合と、されない場合があります。- 例外:
SecurityException
- セキュリティ・マネージャが存在し、呼出し元がRuntimePermission
("modifyThread")
を持たないためスレッドを変更できない場合
-
shutdownNow
public List<Runnable> shutdownNow()
可能であれば、すべてのタスクの取消しまたは停止(あるいはその両方)を行い、後で送信されたすべてのタスクを拒否することを試みます。 これがcommonPool()
である場合は、呼び出しても実行状態に影響しません。また、シャットダウン後に呼び出しても効果はありません。 それ以外の場合、このメソッドの実行中に同時に送信または実行されているタスクは、拒否されることも、されないこともあります。 このメソッドは、タスクの依存関係が存在する場合に終了できるようにするために、既存のタスクと実行されなかったタスクの両方を取り消します。 そのため、このメソッドは(ほかの一部のExecutorの場合とは異なり)常に空のリストを返します。- 戻り値:
- 空のリスト
- 例外:
SecurityException
- セキュリティ・マネージャが存在し、呼出し元がRuntimePermission
("modifyThread")
を持たないためスレッドを変更できない場合
-
isTerminated
public boolean isTerminated()
シャットダウンに続いてすべてのタスクが完了していた場合、true
を返します。- 戻り値:
- シャットダウンに続いてすべてのタスクが完了していた場合は
true
-
isTerminating
public boolean isTerminating()
終了処理が開始されたがまだ完了していない場合、true
を返します。 このメソッドはデバッグに便利なことがあります。 シャットダウン後、十分に時間が経ってから報告されたtrue
の戻り値は、送信されたタスクが割込みを無視または抑制したか、あるいは入出力を待機しているために、このエグゼキュータが適切に終了されないことを示す可能性があります。 タスクは通常、ブロック操作を必要としてはいけないことを記載しているForkJoinTask
クラスの注意事項を参照してください。 ただし、必要としている場合は、割込みでそれを強制的に中止する必要があります。- 戻り値:
- 終了中だが、まだ終了していない場合は
true
-
isShutdown
public boolean isShutdown()
このプールがシャットダウンしていた場合、true
を返します。- 戻り値:
- このプールがシャットダウンされている場合は
true
-
awaitTermination
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
シャットダウン要求後にすべてのタスクが実行を完了していたか、タイム・アウトが発生するか、現在のスレッドで割込みが発生するか、そのいずれかが最初に発生するまでブロックします。commonPool()
はプログラムがシャットダウンするまで終了しないため、共通プールに適用した場合、このメソッドはawaitQuiescence(long, TimeUnit)
と同等ですが、常にfalse
を返します。- パラメータ:
timeout
- 待機する最長時間unit
- timeout引数の時間単位- 戻り値:
- このexecutorが終了した場合は
true
。終了前にタイム・アウトが経過した場合はfalse
- 例外:
InterruptedException
- 待機中に割込みが発生した場合
-
awaitQuiescence
public boolean awaitQuiescence(long timeout, TimeUnit unit)
このプール内で動作するForkJoinTaskから呼び出した場合は、ForkJoinTask.helpQuiesce()
と同じ効果があります。 それ以外の場合は、このプールがisQuiescent()
(静止状態)になるか、または指定されたタイムアウトが経過するまで、待機またはタスクの実行の支援(あるいはその両方)を試みます。- パラメータ:
timeout
- 待機する最長時間unit
- timeout引数の時間単位- 戻り値:
- 静止状態の場合は
true
、タイム・アウトが経過した場合はfalse
。
-
managedBlock
public static void managedBlock(ForkJoinPool.ManagedBlocker blocker) throws InterruptedException
指定された潜在的ブロック・タスクを実行します。 ForkJoinPoolで実行中の場合、このメソッドは、アクティブにされるスペアスレッドを必要に応じて調整して、現在のスレッドがblocker.block()
でブロックされている間の十分な並列性を確保する可能性があります。このメソッドは、いすれかのメソッドで
true
が返されるまで、blocker.isReleasable()
およびblocker.block()
の呼出しを繰り返します。blocker.block()
の呼出しは、false
を返すblocker.isReleasable()
の呼出しが先行します。ForkJoinPoolで実行していない場合、このメソッドの動作は次と同等です
while (!blocker.isReleasable()) if (blocker.block()) break;
blocker.block()
の呼出し中に使用可能な十分な並列性を確保する必要があります。- パラメータ:
blocker
- ブロッカ・タスク- 例外:
InterruptedException
-blocker.block()
がそれを実行した場合
-
-