私は各タイムステップで、多くのモデルをシミュレートする必要があるシミュレーションシステムで作業します。Java再利用エグゼキュータ
ExecutorService executor = Executors.newFixedThreadPool(nThread);
for (Model m : models) {
executor.execute(m.simulationTask());
}
executor.shutdown();
while (! executor.awaitTermination(10, TimeUnit.MINUTES)) {
System.out.println("wait");
}
さて、executorがshutdown()
を呼び出した後新しいタスクに使用することはできません:私は計算をスピードアップするためにFixedThreadPoolを使用しました。エグゼキュータをリセットする方法があるので、次のシミュレーションステップで既存のエグゼキュータ(およびそのスレッド)を再利用できますか?
次のステップに進む前に、すべてのタスクの完了を待つ方法を示していません。 – dogbane
@dogbane - 'invokeAll'は、すべてのタスクが完了するのを待ちます。 – Perception
彼は値を返さない 'execute(Runnable)'を使っているので、おそらく 'Callable'に行くことができますか? –
mzzzzb