这是我想要实现的目标:
我想要一些对象(可能是某种类型的执行器),我可以向其提交要执行的“批量”任务(比如List<Callable<T>>
)。当所有这些任务都已完成运行时,我希望得到通知(可能通过Future
对象中可用的值)。
这个“执行者”应该能够同时处理几个批次。换句话说:两个(或更多)代码站点可以提交两个不同的批次,并且只有当“他的”批次结束时才会通知每个站点。
更好的是,我希望Future
为我提供List<T>
,其中包含各种任务(Callable
s)返回的值。
总结以上内容我正在寻找能够提供与概念相同的API的东西:
public T Future<List<T>> submitBatch(List<Callable<T>> tasks)
java.util.concurrent
的哪些罐头结构可以帮助我实现这一目标?
答案 0 :(得分:7)
ExecutorService
有just 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
中的失败。