首页 > 代码库 > Java fork join ForkJoinPool 用法例子
Java fork join ForkJoinPool 用法例子
本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果。
技术:JDK8.0, Java fork-join模式下的RecursiveTask技术,override compute().
[java] view plain copy print?
- /**
- * Author: Bigtree
- * 本例是把一个大的数组求和的计算的大任务分解到在小范围内求和的小任务,然后把这些小任务之和加起来就是所求之结果。
- * 技术:
- * java fork-join模式下的RecursiveTask技术,override compute().
- */
- import java.util.*;
- import java.util.concurrent.*;
- class Caltask extends RecursiveTask<Long>{
- private static final int THRESHOLD = 1000; //how many numbers one thread can calculate
- private long data[];
- private int start;
- private int end;
- public Caltask(long[] inputData,int start, int end){
- data=http://www.mamicode.com/inputData;
- this.start=start;
- this.end=end;
- }
- @Override
- protected Long compute() {
- Long sumResult=0L;
- if((end - start) <= THRESHOLD ){
- for(int index=start; index<end;index++) {
- sumResult += data[index];
- }
- }
- else { //parallel computing
- int step=(end-start)/THRESHOLD;
- if(((end-start)%THRESHOLD)>0)
- step+=1;
- ArrayList<Caltask> tasks = new ArrayList<>();
- int pos=start;
- int lastposition;
- for(int i=0;i<step;i++){
- lastposition=pos+THRESHOLD;
- if(lastposition>end)
- lastposition=end;
- Caltask onetask= new Caltask(data,pos,lastposition);
- pos=lastposition;
- tasks.add(onetask);
- onetask.fork();
- }
- for(Caltask mtask : tasks){
- sumResult += mtask.join();
- }
- }
- return sumResult;
- }
- }
- public class forkjoincompute {
- public static void ForkJoinShow(){
- long data[] = new long[20001];
- for(long i=0;i<data.length;i++){
- data[(int) i]= i + 1;
- }
- ForkJoinPool mypool= ForkJoinPool.commonPool();
- Future<Long> myfuture = mypool.submit( new Caltask(data,0,data.length));
- try{
- long result=myfuture.get();
- System.out.println("forkjoincompute():computed final result="+result);
- } catch(InterruptedException e){
- e.printStackTrace();
- } catch (ExecutionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- mypool.shutdown();
- }
- }
[java] view plain copy print?
输出结果:
forkjoincompute():computed final result=200030001
Java fork join ForkJoinPool 用法例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。