Java - webapp は、Executors クラスを介して次のコードとしてスレッドを実行し、固定プール サイズで実行する利点は何ですか。
private ExecutorService threadRunner;
threadRunner = Executors.newFixedThreadPool(2);
threadRunner.submit(activeQueueRunner);
threadRunner.submit(standbyQueueRunner);
Java - webapp は、Executors クラスを介して次のコードとしてスレッドを実行し、固定プール サイズで実行する利点は何ですか。
private ExecutorService threadRunner;
threadRunner = Executors.newFixedThreadPool(2);
threadRunner.submit(activeQueueRunner);
threadRunner.submit(standbyQueueRunner);
スレッドには、作成にコストがかかる多くのサポート構造が含まれています。Executor は、一度作成されるスレッドのプールですが、複数のタスク間で再利用するために必要なサポート コードでラップされています。
つまり、サイズ 2 の新しい固定スレッド プールに 2 つのアイテムのみを送信する場合、利点はありません。3 番目のアイテムをthreadRunner
プールに送信すると、完了したタスクの 以前のスレッド (activeQueueRunner
またはstandbyQueueRunner
) の 1 つにバインドされ、そのスレッドを使用してrun(...)
ブロックが実行されるため、利点が得られます。
サブミットされたタスクが完了しないように記述した場合、基本的にスレッドがプールに解放されることはありません。そのため、型プールを使用する場合Executor
は、多くの高速軽量タスクを作成し、プログラムの実行全体にわたってスレッドの作成/破棄の高価なコストをプールに償却させることをお勧めします。