Вы можете повторно использовать службу executor, если вы несколько реструктурируете свой код.
Collection<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>(16);
for (Model m : models) {
tasks.add(m.simulationTask());
}
ExecutorService executor = Executors.newFixedThreadPool(nThread);
try {
executor.invokeAll(tasks);
} catch(InterruptedException ie) {
// Handle this
}
В основном вы собираете все свои задачи, выполняете их и ожидаете выполнения, прежде чем продолжить.Конечно, вы также можете просто использовать новую Службу Исполнителя для каждого из ваших временных шагов, но, по крайней мере, у вас есть варианты.
Предостережения : я не сделалСкомпилируйте код, чтобы могли быть ошибки.Для удобства я также предположил тип параметра Integer.