好的,我知道第一个回答 / 评论会是“使用一个ExecutorService
和invokeAll
”。但是,我们将线程池分开保留有很好的理由(不详述)。
所以我有一个线程池列表(ExecutorServices
),我需要做的是使用submit
在每个线程池上调用不同的Callable
(没有问题)。现在,我有一系列的Future
实例,每个都在不同的ExecutorService
上创建,并且我想等待它们全部完成(并能够提供超时,在此之后未完成的任务会被取消)。
是否存在一个现有的类来实现这个功能(封装一个Future
实例列表并允许等待所有任务完成)?如果不存在,对于高效的机制的建议将不胜感激。
考虑为每个请求调用带有超时的get
,但必须计算每次调用的总时间。
我看到了这篇文章Wait Until Any of Future is Done,但这扩展了Future
而不是封装了它们的列表。
MoreExecutors.listeningDecorator(service)
,那么你可以将它们全部转变为ListeningExecutorService
。然后,你可以使用Futures.allAsList
创建一个“合并”的未来。 - Louis Wasserman