java利用Fork/Join實現1+...+100
阿新 • • 發佈:2018-12-15
import java.util.concurrent.*; /** * Created by Mr.Jo on 2018/9/10. */ public class Main{ static class CountTask extends RecursiveTask<Integer> { private static final int f = 2; private int start; private int end; public CountTask(int start, int end) { this.start = start; this.end = end; } @Override protected Integer compute() { int sum = 0; boolean canCompute = (end - start) <= f; if (canCompute) { for (int i = start; i <= end; i++) { sum += i; } } else { int mid = (start + end) / 2; CountTask leftTask = new CountTask(start, mid); CountTask rightTask = new CountTask(mid+1, end); leftTask.fork(); rightTask.fork(); int leftResult = leftTask.join(); int rightResult = rightTask.join(); sum = leftResult + rightResult; } return sum; } } public static void main(String[] args) throws InterruptedException, ExecutionException { ForkJoinPool forkJoinPool = new ForkJoinPool(); CountTask task = new CountTask(1, 100); Future<Integer> result = forkJoinPool.submit(task); System.out.println(result.get()); } }