3

我有 N 个任务,我希望它们与 N 个线程并行处理。我想等到所有任务都完成后,存储结果,然后运行下一个 N 个任务(以此类推)。

java util concurrency 中的哪些抽象可以帮助我?

我看了看ExecutorService.invokeAll(),但它返回了一个期货列表,所以我应该在一个循环中迭代所有这些,直到所有这些都完成。

我想,应该有更直接的方法来计算一组任务。

4

4 回答 4

6

ExecutorService.invokeAll()可能是最直接的方法。

您不会遍历它们中的任何一个来等待完成。 invokeAll只有在所有这些都完成后才返回。因此,当您可以迭代它们时,get将立即返回。

于 2013-06-21T14:57:50.440 回答
4

您可以使用- 它允许您按照完成的顺序ExecutorCompletionService获取s。Future

您仍然会有一个很小的 ​​while 循环,并且在一切完成后要调用的代码将在循环之后。我觉得应该没问题。

于 2013-06-21T14:44:29.383 回答
0

如果您使用的是 JAVA 7,我建议您使用 Fork/Join 框架。我会解释,但这篇文章比我能说的要好得多:http ://www.oracle.com/technetwork/articles/java/fork-join-422606.html

于 2013-06-21T14:55:47.037 回答
0

我建议您使用 CyclicBarrier。这样你就等到所有线程都完成了工作,然后你就可以开始下一组任务了。

于 2013-06-21T15:23:41.133 回答