Единственная модель, которую я могу придумать для запуска нескольких подобных процессов (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()
), если они еще не готовы?