前面一章是对县城池,自己的理解总结。只限目录
package jDKMulit; import java.util.ArrayList; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.RecursiveTask; /** * Created by ycy on 16/1/13. */ public class CountTaskForkJoin extends RecursiveTask<Long> { private static final int THEESHOLD = 10000; private long start; private long end; public CountTaskForkJoin(long start, long end) { this.start = start; this.end = end; } @Override public Long compute() { long sum = 0; boolean canCpmpute = (end - start) < THEESHOLD; if (canCpmpute) { for (long i = start; i <= end; i++) { sum += i; } } else { //分为100个小任务 long step = (start + end) / 100; ArrayList<CountTaskForkJoin> subTasks = new ArrayList<CountTaskForkJoin>(); long pos = start; for (int i = 0; i < 100; i++) { long lastOne = pos + step; if (lastOne > end) lastOne = end; CountTaskForkJoin subTask = new CountTaskForkJoin(pos, lastOne); pos += step + 1; subTasks.add(subTask); subTask.fork(); } for (CountTaskForkJoin t : subTasks) { sum += t.join(); } } return sum; } public static void main(String[] args) { ForkJoinPool forkJoinPool = new ForkJoinPool(); CountTaskForkJoin task = new CountTaskForkJoin(0, 200000l); ForkJoinTask<Long> rsult = forkJoinPool.submit(task); try { long res = rsult.get(); System.out.println("sum=" + res); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }