import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveTask; class MyTask extends RecursiveTask<Integer> { private int[] array; private int start; private int end; public MyTask(int[] array, int start, int end) { this.array = array; this.start = start; this.end = end; } @Override protected Integer compute() { int sum = 0; if (end - start <= 100) { for (int i = start; i <= end; i++) { sum += array[i]; } } else { int mid = (start + end) / 2; MyTask leftTask = new MyTask(array, start, mid); MyTask rightTask = new MyTask(array, mid + 1, end); invokeAll(leftTask, rightTask); int leftResult = leftTask.join(); int rightResult = rightTask.join(); sum = leftResult + rightResult; } return sum; } } public class ThreadPoolExample { public static void main(String[] args) { ForkJoinPool forkJoinPool = new ForkJoinPool(); int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; MyTask myTask = new MyTask(array, 0, array.length - 1); int result = forkJoinPool.invoke(myTask); System.out.println("Result: " + result); } }


上一篇:
下一篇:
切换中文