我能想到的使用 Java Futures ( java.util.concurrent.Future<T>
) 运行多个类似进程 (SIMD) 的唯一模型如下:
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()
)(如果还没有准备好)?