Java并发之Fork-Join框架

事例项目:https://gitee.com/silentwu/java-concurrency-tutorial

fork-join介绍

Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join框架要完成两件事情:

  • 任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割
  • 执行任务并合并结果:分别对分割的子任务进行处理,然后再对所有子任务的结果进行合并。

fork-join 框架的类架构图

Java并发之Fork-Join框架_第1张图片
类架构图
  • ForkJoinTask : 在使用的时候,我们首先需要创建一个ForkJoinTask,一般不需要继承这个类,java 已提供了两个类,只需要继承他们
  1. RecursiveTask : 任务执行之后有返回值
  2. RecursiveAction : 任务执行之后没有返回值
  • ForkJoinPool : 调用ForkJoinTask

伪代码:

class Worker extend RecursiveTask{
        @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();

你可能感兴趣的:(Java并发之Fork-Join框架)