事例项目:https://gitee.com/silentwu/java-concurrency-tutorial
fork-join介绍
Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join框架要完成两件事情:
- 任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割
- 执行任务并合并结果:分别对分割的子任务进行处理,然后再对所有子任务的结果进行合并。
fork-join 框架的类架构图
类架构图- ForkJoinTask : 在使用的时候,我们首先需要创建一个ForkJoinTask,一般不需要继承这个类,java 已提供了两个类,只需要继承他们
- RecursiveTask : 任务执行之后有返回值
- RecursiveAction : 任务执行之后没有返回值
- ForkJoinPool : 调用ForkJoinTask
伪代码:
class Worker extend RecursiveTask<xxxx>{
@Override
protected xxx compute() {
if (是否满足条件) {
return executeWorker(); //执行任务 ,返回执行结果
}
//不满足条件那么就分割
Worker worker1= new Worker();
Worker worker2= new Worker();
invokeAll(worker1, worker2); //调用两个worker, 如果不满足条件内部又会继续分割
return worker1.join() + worker2.join();
}
}
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(new Worker());
pool.shutdown();
网友评论