【发布时间】:2015-10-13 11:23:23
【问题描述】:
我们在 java 中有三种不同的多线程技术 - Fork/Join pool、Executor Service 和 CountDownLatch
分叉/加入池 (http://www.javacodegeeks.com/2011/02/java-forkjoin-parallel-programming.html)
Fork/Join 框架旨在使分而治之的算法易于并行化。这种类型的算法非常适合可以分为两个或多个相同类型的子问题的问题。他们使用递归将问题分解为简单的任务,直到这些任务变得简单到可以直接解决。然后将子问题的解决方案组合起来,得到原始问题的解决方案
ExecutorService是一个扩展Executor类的接口,代表异步执行。它为我们提供了管理异步任务结束和检测进度的机制。
invokeAll() : 执行给定的任务,返回一个 Futures 列表,在所有完成后保存它们的状态和结果。 Future.isDone() 对于返回列表的每个元素都是 true。
CountDownLatch:(http://examples.javacodegeeks.com/core-java/util/concurrent/countdownlatch-concurrent/java-util-concurrent-countdownlatch-example/)
CountDownLatch 用于同步,以允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
我的假设:
在这两种选择中,最终结果只有在所有任务/线程完成后才能知道。
这三个选项是互补的还是互补的?
【问题讨论】:
-
CountDownLatch是一个通用的低级同步原语,它可以用于同步任何类型的操作,而ForkJoin是一个更高级别的抽象,专门用于递归除/征服处理。 -
CountDownLatch不是一个框架。 Biziclop 称其为“多功能”。我称它为简单的污垢。你可以用一个初始整数值构造一个,你可以递减这个值,你可以得到这个值,你可以等待这个值达到零(即,因为被其他线程递减)。这就是它的全部。
标签: java multithreading executorservice countdownlatch forkjoinpool