什么是 Fork/Join 框架
Fork/Join 框架是一种在 JDK 7 引入的线程池,用于并行执行 把一个大任务拆成多个小任务并行执行,最终汇总每个小任务结果得到大任务结果 的特殊任务。通过其命名也很容易看出框架主要分为 Fork 和 Join 两个阶段,第一阶段 Fork 是把一个大任务拆分为多个子任务并行的执行,第二阶段 Join 是合并这些子任务的所有执行结果,最后得到大任务的结果。
这里不难发现其执行主要流程:首先判断一个任务是否足够小,如果任务足够小,则直接计算,否则,就拆分成几个更小的小任务分别计算,这个过程可以反复的拆分成一系列小任务。 Fork/Join 框架是一种基于 分治 的算法,通过拆分大任务成多个独立的小任务,然后并行执行这些小任务,最后合并小任务的结果得到大任务的最终结果,通过并行计算以提高效率。
Fork/Join 框架使用示例
下面通过一个 计算列表中所有元素的总和 的示例来看看 Fork/Join 框架是如何使用的,总的思路是:将这个列表分成许多子列表,然后对每个子列表的元素进行求和,然后,我们再计算所有这些值的总和就得到原始列表的和了。 Fork/Join 框架中定义了 ForkJoinTask 来表示一个 Fork/Join 任务,其提供了 fork() 、 join() 等操作,通常情况下,我们并不需要直接继承这个 ForkJoinTask 类,而是使用框架提供的两个 ForkJoinTask 的子类:
- RecursiveAction 用于表示
没有返回结果的Fork/Join任务。 - RecursiveTask 用于表示
有返回结果的Fork/Join任务。
很显然,在这个示例中是需要返回结果的,可以定义 SumAction 类继承自 RecursiveTask ,代码如下:
/**
* @author mghio
* @since 2021-07-25
*/
public class SumTask extends RecursiveTask<Long> {
private static final int SEQUENTIAL_THRESHOLD = 50;
private final Li

Fork/Join框架是Java中用于并行处理的线程池,基于分治策略。它将大任务拆分成多个子任务并行执行,然后合并结果。文章通过一个数字列表求和的示例展示了Fork/Join框架的使用,包括RecursiveTask的实现。框架设计上采用工作窃取算法,利用双端队列和ForkJoinPool线程池确保任务并行执行。ForkJoinTask类表示可分的任务,ForkJoinPool负责任务的执行。总结指出,合理设置小任务阈值能提升程序性能。
最低0.47元/天 解锁文章
969

被折叠的 条评论
为什么被折叠?



