【发布时间】:2013-06-30 08:03:14
【问题描述】:
我通过将Callables 提交给Executor 创建了一组Futures。伪代码:
for all tasks
futures.add(executor.submit(new callable(task)))
现在我想让所有期货最多等待 n 秒,直到全部完成。我知道我可以打电话给Future#get(timeout),但是如果我在一个循环中为我所有的期货按顺序调用它,那么超时就会开始加起来。伪代码:
for all futures
future.get(timeout)
get 在结果准备好之前超时阻塞。因此,如果第一个在超时之前完成,而第二个也在超时之前完成,以此类推,整个执行时间最多为number of futures * timeout 而不是timeout。
因此,我正在寻找一种方法,它接受Futures 列表和超时,并行运行,然后返回未来结果的集合。有什么想法吗?
【问题讨论】:
-
这还不完全清楚。您希望超时到期时尚未完成的任务发生什么?您希望它们被取消还是允许继续?
-
他们应该被取消。此外,不知何故,我需要知道哪些已完成,哪些未完成。我想为此我可以再次迭代期货并在所有期货上调用
isDone。
标签: java concurrency future java.util.concurrent