想找工作去哪个网站,广告公司注册流程及费用,网页小游戏下载,阅读网站策划书ForkJoin
Fork/Join框架是JAVA7提供的一个用于并行执行任务的框架#xff0c;是一个把大任务分割成若干个小任务#xff0c;最终汇总每个小任务结果后得到大任务结果的框架Fork/Join中两个重要的类
ForkJoinTask#xff1a;使用该框架#xff0c;需要创建一个ForkJoin任务…ForkJoin
Fork/Join框架是JAVA7提供的一个用于并行执行任务的框架是一个把大任务分割成若干个小任务最终汇总每个小任务结果后得到大任务结果的框架Fork/Join中两个重要的类
ForkJoinTask使用该框架需要创建一个ForkJoin任务它提供在任务中执行fork和join操作的机制。一般情况下我们并不需要直接继承ForkJoinTask类只需要继承它的子类它的子类有两个RecursiveAction:用于没有返回结果的任务RecursiveTask:用于有返回结果的任务ForkJoinPool任务ForkJoinTask需要通过ForkJoinPool来提交任务
package com.example.core.juc;import java.util.concurrent.*;public class UseForkJoin extends RecursiveTaskInteger {//执行计算并要求返回结果的需要继承RecursiveTaskInteger//RecursiveTaskInteger其中Integer为计算的类型private static final int THRESHOLD 2;//阈值也就是拆分的原则private int start;private int end;public UseForkJoin(int start,int end){this.start start;this.end end;}Overrideprotected Integer compute(){int sum 0; //123......100boolean canCompute (end - start) THRESHOLD;if(canCompute){for(int i start;iend;i){sum i;}}else{//如果任务数大于阈值的情况就进行拆分 fork操作 然后去join//1 100/2 50int middle (start end)/2;UseForkJoin leftTask new UseForkJoin(start,middle);UseForkJoin rightTask new UseForkJoin(middle1,end);//执行左右两边的任务leftTask.fork();rightTask.fork();//等待任务执行完成之后进行获取结果int leftResult leftTask.join();int rightResult rightTask.join();sum leftResult rightResult;}return sum;}public static void main(String[] args) throws InterruptedException, ExecutionException {ForkJoinPool pool new ForkJoinPool();UseForkJoin ufj new UseForkJoin(1,100);FutureInteger result pool.submit(ufj);System.out.println(最终的结果是:result.get());}
}
/*
output:
最终的结果是:5050*/