import java.util.concurrent.RecursiveTask; /** * */ /** * @author sbfan * */ public class FindMax extends RecursiveTask { /** * */ private static final long serialVersionUID = 1L; private int low = 0; private int high = 0; private int[] array = null; private final int SEQUENTIAL_CUTOFF = 500; public FindMax(int[] arr, int lo, int hi) { low = lo; high = hi; array = arr; } /* (non-Javadoc) * @see java.util.concurrent.RecursiveTask#compute() */ @Override protected Integer compute() { Integer max = Integer.MIN_VALUE; if(high - low <= SEQUENTIAL_CUTOFF) { for(int i = low; i < high; i++) { if(array[i] > max) { max = array[i]; } } } else { int mid = (low + high)/2; FindMax left = new FindMax(array, low, mid); FindMax right = new FindMax(array, mid, high); left.fork(); int rightMax = right.compute(); int leftMax = left.join(); max = Math.max(leftMax, rightMax); } return max; } }