package vn.edu.rmit.sadi; import java.util.concurrent.RecursiveTask; public class Sum extends RecursiveTask<Long> { public static final int THRESHOLD = 5000; private int low; private int high; private int[] a; public Sum(int[] arr, int low, int high) { this.low = low; this.high = high; this.a = arr; } protected Long compute() { if((high - low) < THRESHOLD) { long sum = 0; for(int i=low; i<high; i++) { sum += a[i]; } return sum; } else { int mid = low + (high - low) / 2; Sum leftSum = new Sum(a, low, mid); Sum rightSum = new Sum(a, mid, high); leftSum.fork(); long right = rightSum.compute(); long left = leftSum.join(); return left + right; } } }