package com.king.forkjoin; import java.util.concurrent.RecursiveAction; import java.util.concurrent.RecursiveTask; public class ForkJoinDemo extends RecursiveTask{ private Long start; private Long end; private Long temp = 10000L; public ForkJoinDemo(Long start, Long end) { this.start = start; this.end = end; } //计算方法 @Override protected Long compute() { if ((end-start) package com.king.forkjoin; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.stream.LongStream; public class Test { public static void main(String[] args) throws ExecutionException, InterruptedException { test3(); } //普通方法 public static void test1(){ Long sum = 0L; long start = System.currentTimeMillis(); for (Long i = 1L; i < 10_0000_0000; i++) { sum+=i; } long end = System.currentTimeMillis(); System.out.println("sum="+sum+"时间:"+(end-start)); } //ForkJoin方法 public static void test2() throws ExecutionException, InterruptedException { long start = System.currentTimeMillis(); ForkJoinPool forkJoinPool = new ForkJoinPool(); ForkJoinTasktask = new ForkJoinDemo(0L, 10_0000_0000L); forkJoinPool.execute(task); //执行 ForkJoinTask submit = forkJoinPool.submit(task);//提交 Long sum = submit.get(); long end = System.currentTimeMillis(); System.out.println("sum="+sum+"时间:"+(end-start)); } public static void test3(){ long start = System.currentTimeMillis(); //Stream并行流 long sum = LongStream.rangeClosed(0L, 10_0000_0000L).parallel().reduce(0, Long::sum); long end = System.currentTimeMillis(); System.out.println("sum="+sum+"时间:"+(end-start)); } }



