Java执行者:提交一批任务?

时间:2014-03-04 09:32:27

标签: java concurrency java.util.concurrent

这是我想要实现的目标: 我想要一些对象(可能是某种类型的执行器),我可以向其提交要执行的“批量”任务(比如List<Callable<T>>)。当所有这些任务都已完成运行时,我希望得到通知(可能通过Future对象中可用的值)。

这个“执行者”应该能够同时处理几个批次。换句话说:两个(或更多)代码站点可以提交两个不同的批次,并且只有当“他的”批次结束时才会通知每个站点。

更好的是,我希望Future为我提供List<T>,其中包含各种任务(Callable s)返回的值。

总结以上内容我正在寻找能够提供与概念相同的API的东西:

public T Future<List<T>> submitBatch(List<Callable<T>> tasks)

java.util.concurrent的哪些罐头结构可以帮助我实现这一目标?

1 个答案:

答案 0 :(得分:7)

ExecutorServicejust the method for that

它(几乎)符合您的要求,因为它返回List<Future<T>>

因此:

final List<Future<Whatever>> list = service.invokeAll(myCallables);
// walk list and call .get() on each future

请注意,正如文档所说,此方法将等到所有callables完成。此外,您仍需要检查每个Future中的失败。