我有 N 个任务,我希望它们与 N 个线程并行处理。我想等到所有任务都完成后,存储结果,然后运行下一个 N 个任务(以此类推)。
java util concurrency 中的哪些抽象可以帮助我?
我看了看ExecutorService.invokeAll()
,但它返回了一个期货列表,所以我应该在一个循环中迭代所有这些,直到所有这些都完成。
我想,应该有更直接的方法来计算一组任务。
我有 N 个任务,我希望它们与 N 个线程并行处理。我想等到所有任务都完成后,存储结果,然后运行下一个 N 个任务(以此类推)。
java util concurrency 中的哪些抽象可以帮助我?
我看了看ExecutorService.invokeAll()
,但它返回了一个期货列表,所以我应该在一个循环中迭代所有这些,直到所有这些都完成。
我想,应该有更直接的方法来计算一组任务。
ExecutorService.invokeAll()
可能是最直接的方法。
您不会遍历它们中的任何一个来等待完成。 invokeAll
只有在所有这些都完成后才返回。因此,当您可以迭代它们时,get
将立即返回。
您可以使用- 它允许您按照完成的顺序ExecutorCompletionService
获取s。Future
您仍然会有一个很小的 while 循环,并且在一切完成后要调用的代码将在循环之后。我觉得应该没问题。
如果您使用的是 JAVA 7,我建议您使用 Fork/Join 框架。我会解释,但这篇文章比我能说的要好得多:http ://www.oracle.com/technetwork/articles/java/fork-join-422606.html
我建议您使用 CyclicBarrier。这样你就等到所有线程都完成了工作,然后你就可以开始下一组任务了。