私は、複数の反復で動作するプログラムを持っています。 各ループでは、最大3000個の同時スレッドを開始しています。その中のいくつかは反復中に開始し、反復の終了前に終了し、そのうちのいくつかは起動され、反復の終了時まで生き続ける。Javaスレッドプール - どのタイプと数ですか?
スレッドごとに繰り返します。
- FixedThreadPoolはどのタイプのエクゼキュータを使うべきですか? ThreadPoolExecutor?その他?
- 最大値、最小値、固定値、その他の値のスレッド数を設定する必要がある場合はどうすればよいですか?
- ステータスを追跡するために、各スレッドのサブミッションごとに新しいFutureオブジェクトを作成する必要がありますか?
最初、私は通常FixedThreadPoolを使用し、スレッドの最高数は通常、マシン内のコア数(Runtime.getRuntime().availableProcessors()
)は、あなたの質問に答えるために感謝
ありがとうシャロン。 1. maximumPoolSizeのThreadPoolExecutor ctor引数をavailableProcessors()の値に設定することをお勧めしますか?私は実際に任意のスレッドの種類のプールを使用できますか? 3. qn 2に続いて、プールをシングルトンオブジェクトとして定義することが賢明でしょうか?私が言ったように – dushkin
、プールのサイズは多くの要因に依存します。最適な結果を得るためには実験を行う必要があります。 availableProcessorsから始めることができ、試行錯誤して調整することができます。エグゼキュータはシングルトンにすることができます。 (またはパブリック静的var) –