【发布时间】:2012-10-22 10:20:37
【问题描述】:
好的,所以我知道这里的第一个答案/评论将是“使用一个 ExecutorService 并使用 invokeAll”。但是,我们有充分的理由(我不会对此感到厌烦)将线程池分开。
所以我有一个线程池列表 (ExecutorServices),我需要做的是使用 submit 在每个线程池上调用不同的 Callable(那里没问题)。现在我有了这个Future 实例的集合,每个实例都在单独的ExecutorService 上创建,我想等待它们全部完成(并且能够提供一个超时,在该超时时取消任何未完成的操作)。
是否存在可以执行此操作的现有类(包装Future 实例的列表并允许等待所有操作完成)?如果没有,将不胜感激有关有效机制的建议。
正在考虑调用 get 并为每个调用设置超时,但必须计算每次调用所经过的总时间。
我看到这篇帖子 Wait Until Any of Future is Done 但这扩展了 Future 而不是包装它们的列表。
【问题讨论】:
-
对于每个列表,当最后一个完成时 - 正如他们所说的那样
-
更新帖子以明确超时是问题所在,我希望在这方面不要重新发明轮子。
-
好吧,如果您阅读那些漂亮的 lil' java 文档,您会看到您可以 AwaitTermination 并设置超时,然后当您提交任务时,您可以将其发送关闭,如果任务未及时完成超时 wabamzorz 后关机!!!!
-
他在哪里说执行器将被关闭?
-
嗯。如果您可以将每个单独的服务包装在
MoreExecutors.listeningDecorator(service)中,则可以将它们全部转换为ListeningExecutorServices。然后你可以做Futures.allAsList来创造一个“加入”的未来。
标签: java concurrency executorservice future