我有一组 Futures
通过将 Callable
提交给 Executor
而创建 . 伪代码:
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
.
因此,我正在寻找一个接受 Future
列表和超时的方法,并行运行,然后返回未来结果的集合 . 有任何想法吗?
1 回答
你可以使用ExecutorService.invokeAll:
如果您已经需要监视
Future
并且无法使用invokeAll
,则可以自行测量超时 . 伪代码:这样,您最多可以为每个未来提供剩余的持续时间,直到达到超时 .