我是菜鸟:ForkJoin框架

ForkJoin框架用于并行执行任务的框架,是把一个大的任务分割成若干个小的任务,最终汇总每个小的任务结果后得到大任务结果的框架。
从上面的描述来看,ForkJoin主要有2个部分需要解决:
1. 任务的分割和任务结果的汇总
2. 每个小任务的执行;
针对上面的2点,ForkJoin提供了下面的类来分别处理。

分割任务和结果的汇总

首先要创建一个ForkJoin任务,提供任务的分割,提交和结果的获取。
具体的类如下图:
这里写图片描述
很多时候,我们只是需要继承2个子类:RecursiveAction 或者 RecursiveTask就行。区别见图中关系。例如:public class MyTask extends RecursiveTask<Integer>.
在MyTask类中,必须复写compute函数,在compute函数里面给出下面的内容;
1. 任务的划分
2. 子任务的执行; 例如: MyTask child = new MyTask(); child.fork();
3. 等待子任务的执行并返回结果; 例如: child.join( );
4. 合并子任务的结果; 例如 return child1+child2

任务的执行

ForkJoinPool 用来对子任务的执行。ForkJoinPool是由 ForkJoinTask 和 ForkJoinWorkerThread组成,具体的实现细节后面会讲到。现在先说明下这个类的使用:

......
ForkJoinPool fjp = new ForkJoinPool();
MyTask task  = new myTask();

Future<Integer> result = fjp.submit(task); //这个过程很像线程池的使用。

ForkJoin框架的实现细节

下面主要按照图来说明,感觉文字描述比较慢而且不直观。

ForkJoinTask之fork方法

这里写图片描述

ForkJoinTask之join方法

这里写图片描述
在join方法中,会根据doJoin( )方法返回的状态进行不同的处理。

以上就是整个ForkJoin框架的大体思路,对于一些详细的细节,如doJoin()内部的实现暂时没有给出详细的思想。以后如果有需要再补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值