欢迎光临散文网 会员登陆 & 注册

Java基础——一文读懂Fork/Join框架

2023-07-24 18:16 作者:懒人Java屈原  | 我要投稿

分而治之

fork/Join框架的思想是将一个规模为n的大任务,fork成几个规模较小的K个子任务,最后合并所有子任务的结果,返回最终结果。

工作窃取

如图一个规模为T的任务划分成12个子任务,分别有4个线程在执行。如果当前线程没有可执行任务时,会从其他线程的任务队列中窃取任务来执行。工作窃取算法保证了cpu不会处于空闲状态。

ForkJoin用法

1.带返回值RecursiveTask


打印统计结果



2.无返回值RecursiveAction

等待所有任务执行结束



Java8 Stream并行流的Fork/Join框架使用

如下所示代码,利用Java8的并行流,对1到5的数进行相乘

1.parallel()方法设置标志位

设置了sourceStage.parallel 值为true

2.reduce()方法根据标志位来判断是否并行

evaluate方法,会调用isParallel(),对上面的sourceStage.parallel进行判断

3.terminalOp的接口以及实现类

接口TerminalOp

实现类ReduceOps新建了ReduceTask对象

对ReduceTask进行代码追踪,最后会追踪到ForkJoinTask类中,invoke方法是ForkJoinTask()的invoke()方法

结论

由此我们可以看出,Java8的Stream并行流底层代码,确实采用了Fork/Join框架来实现


Java基础——一文读懂Fork/Join框架的评论 (共 条)

分享到微博请遵守国家法律