1. 程式人生 > 其它 >一分鐘帶你瞭解下java中的fork/join

一分鐘帶你瞭解下java中的fork/join

https://zhuanlan.zhihu.com/p/97258195

作者對fork、join框架介紹得清楚;例子舉得也很好,核心類都是用到了。

重要的2個類圖:

配置上對應的程式碼

 1 public class CountTask extends RecursiveTask<Integer> {
 2     //閥值
 3     private static final int THRESHOLD = 2;
 4     private int start;
 5     private int end;
 6 
 7     public CountTask(int
start, int end) { 8 this.start = start; 9 this.end = end; 10 } 11 12 /** 13 * The main computation performed by this task. 14 * 15 * @return the result of the computation 16 */ 17 @Override 18 protected Integer compute() { 19 int sum = 0; 20
//判斷是否是拆分完畢 21 int lenth = end - start; 22 if (lenth <= THRESHOLD) { 23 //如果拆分完畢就相加 24 for (int i = start; i <= end; i++) { 25 sum += i; 26 } 27 } else { 28 //沒有拆分完畢就開始拆分 29 int middle = (start + end) / 2;
30 CountTask leftTask = new CountTask(start, middle); 31 CountTask rightTask = new CountTask(middle + 1, end); 32 //執行子任務 33 invokeAll(leftTask, rightTask); 34 //等待子任務執行完,並得到其結果 35 Integer rightResult = rightTask.join(); 36 Integer leftResult = leftTask.join(); 37 //合併子任務 38 sum = leftResult + rightResult; 39 } 40 return sum; 41 } 42 43 public static void main(String[] args) throws ExecutionException, InterruptedException { 44 ForkJoinPool forkJoinPool = new ForkJoinPool(); 45 CountTask countTask = new CountTask(1, 100); 46 ForkJoinTask<Integer> forkJoinTask = forkJoinPool.submit(countTask); 47 System.out.println(forkJoinTask.get()); 48 } 49 }