10

いつでも (キューを使用して) 7 つの同時スレッドを実行する固定スレッド プールがあり、それを 7 つの同時ジョブのみを実行するが、より多くのキュー/スケジュールを設定できるスケジュールされたスレッド プールに変換したいと考えています。

ドキュメントを読んでも、あまり役に立ちませんでした..

newFixedThreadPool

public static ExecutorService newFixedThreadPool(int nThreads)

無制限の共有キューで動作するスレッドの固定セットを再利用するスレッド プールを作成します。シャットダウン前の実行中に障害が発生していずれかのスレッドが終了した場合、後続のタスクを実行する必要がある場合は、新しいスレッドが代わりに使用されます。

パラメータ: nThreads - プール内のスレッド数 戻り値: 新しく作成されたスレッド プール

newScheduledThreadPool

public static Sc​​heduledExecutorService newScheduledThreadPool(int corePoolSize)

指定された遅延後にコマンドを実行するか、定期的に実行するようにコマンドをスケジュールできるスレッド プールを作成します。

パラメータ: corePoolSize - アイドル状態であっても、プールに保持するスレッドの数。戻り値: 新しく作成されたスケジュールされたスレッド プール

私が理解していないのは、corePoolSize と nThreads は同じものですか? スケジュールされたスレッド プールは本当に固定スレッド プールのサブセットですか? つまり、スケジュールされたスレッド プールを遅延タスクをキューに入れることができる固定スレッド プールとして使用できますか?

4

3 に答える 3

7

はい、スケジュール機能が追加されているだけで、基本的に同じものです。ScheduledThreadPoolExecutor は、ExecutorService (ThreadPoolExecutor) のデフォルトの実装も拡張します。

nThreads および corePoolSize は、生成されるスレッドの数です。固定エグゼキューターの場合、常に同じです。他の実装では、最小 (corePoolSize) と最大 (maxPoolSize) の間で異なります。

于 2011-05-17T22:15:14.200 に答える
1

はい、JDK5-6 ではそのように動作します。原則として、ScheduledExecutorService インターフェイスはプール サイズの問題について言及していませんが、JDK で使用される実際の実装では、固定プールが使用されます。

クラス ScheduledThreadPoolExecutor

このクラスは ThreadPoolExecutor を継承していますが、継承されたチューニング メソッドのいくつかは役に立ちません。特に、corePoolSize スレッドと無制限のキューを使用して固定サイズのプールとして機能するため、 maximumPoolSize を調整しても効果はありません。

アプリケーション フレームワークまたは別のベンダーによって提供される ScheduledExecutorService の別の実装を使用する場合、これが当てはまらないことは明らかです。

于 2011-05-17T22:12:59.847 に答える
0

はい、スレッドプールサイズに関してはまったく同じです。最終的には両方とも同じThreadPoolExecutor コンストラクターを呼び出します。

于 2011-05-17T22:22:31.133 に答える