gpt4 book ai didi

java - Java Futures 的乱序返回

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:10 25 4
gpt4 key购买 nike

我可以想出的唯一模型来运行多个相似的进程(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()),如果还没有准备好?

最佳答案

您可以试用ExecutorCompletionService:

http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ExecutorCompletionService.html

您只需提交您的任务并调用 take,直到您收到所有 Futures。

关于java - Java Futures 的乱序返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com