0

Java - webapp は、Executors クラスを介して次のコードとしてスレッドを実行し、固定プール サイズで実行する利点は何ですか。

private ExecutorService threadRunner;
threadRunner = Executors.newFixedThreadPool(2);

threadRunner.submit(activeQueueRunner);
threadRunner.submit(standbyQueueRunner);
4

1 に答える 1

2

スレッドには、作成にコストがかかる多くのサポート構造が含まれています。Executor は、一度作成されるスレッドのプールですが、複数のタスク間で再利用するために必要なサポート コードでラップされています。

つまり、サイズ 2 の新しい固定スレッド プールに 2 つのアイテムのみを送信する場合、利点はありません。3 番目のアイテムをthreadRunnerプールに送信すると、完了したタスクの 以前のスレッド (activeQueueRunnerまたはstandbyQueueRunner) の 1 つにバインドされ、そのスレッドを使用してrun(...)ブロックが実行されるため、利点が得られます。

サブミットされたタスクが完了しないように記述した場合、基本的にスレッドがプールに解放されることはありません。そのため、型プールを使用する場合Executorは、多くの高速軽量タスクを作成し、プログラムの実行全体にわたってスレッドの作成/破棄の高価なコストをプールに償却させることをお勧めします。

于 2012-09-11T18:58:04.697 に答える