現時点で CPU を多用する他のアプリケーションがシステム上で実行されていないという前提の下では、通常、プロセッサごとに 1 つのスレッドを持つことが理想的です。
この背後にある理論的根拠は、スレッド間の切り替えは (相対的に) 高価な操作であるため、マルチコア CPU を効率的に使用する最善の方法は、各コアが利用されるように CPU に十分なスレッドを与えながら、スレッドの切り替えを回避することです。
システムの CPU コアの数は、次のように取得できます。
Runtime.getRuntime().availableProcessors();
ハイパー スレッディングを備えたシステムでは、物理 CPU ではなく仮想 CPU の数が表示されます。物理コアごとに 1 つではなく、仮想コアごとに 1 つのスレッドを実行すると、各スレッドが完了するまでに少し時間がかかる場合がありますが、CPU の内部リソースをより効率的に使用できるため、全体としてより多くの作業を同時に実行できます。そのため、個々のスレッドができるだけ早く終了することが重要でない限り、仮想コアごとに 1 つ実行する必要があります (その場合、シングル スレッドを実行するマルチコア Intel CPU はコアをオーバークロックするため、シングル スレッドの使用を検討できます)。実行し、コア間で切り替えて、他のコアを冷却できるようにします)。
エンドユーザーに出荷する予定のアプリケーションの場合、この値をデフォルトとして使用することを検討できますが、ユーザーは他の CPU 負荷の高いアプリケーションと並行してプログラムを実行する可能性があるため、変更を許可することができます。その場合、アプリケーションによって生成されるスレッドの数を減らして、他のスレッドの速度を落とさないようにする必要があるかもしれません。