Единственная модель, которую я могу придумать для запуска нескольких похожих процессов (SIMD) с использованием
Java Futures (java.util.concurrent.Future<T>
) выглядит следующим образом:
class Job extends Callable<T> {
public T call() {
// ...
}
}
List<Job> jobs = // ...
List<Future<T>> futures = ExecutorService.invokeAll(jobs);
for (Future<T> future : futures) {
T t = future.get();
// Do something with t ...
}
Проблема этой модели заключается в том, что если задание 0 занимает много времени, но задания 1, 2 и 3 уже завершены, цикл for
будет ожидать получения возвращаемого значения из задания 0.
Есть ли какая-либо модель, которая позволяет мне получать каждый Future
результат, когда он становится доступным, без простого вызова Future.isDone()
и ожидания ожидания (или вызова Thread.sleep()
), если ни одна из них еще не готова?