Javaで負荷テストアプリケーションを作成していて、テスト対象のサーバーに対してタスクを実行するスレッドプールがあります。したがって、1000個のジョブを作成し、それらを5つのスレッドで実行するには、次のようにします。
ExecutorService pool = Executors.newFixedThreadPool(5);
List<Runnable> jobs = makeJobs(1000);
for(Runnable job : jobs){
pool.execute(job);
}
ただし、すべての「ジョブ」オブジェクトを事前に作成し、必要になるまでそれらをメモリに保持する必要があるため、このアプローチはあまりうまく拡張できないと思います。
新しいジョブが必要になるたびにプール内のスレッドをある種の「JobFactory」クラスに移動させ、必要な数のジョブが実行されるまでファクトリが要求に応じてRunnablesを構築する方法を探しています。ファクトリは「null」を返し始めて、これ以上行う作業がないことをスレッドに通知することができます。
このようなものを手作業でコーディングすることもできますが、それは十分に一般的なユースケースのようであり、代わりに使用できる素晴らしいが複雑な「java.util.concurrent」パッケージに何かあるかどうか疑問に思っていました。