并行流就是执行任务的时候分配给多个线程队列执行,
但是如果某一个队列执行完成,其他队列还在执行,这个时候执行完成的队列就是空闲状态
java8中的并行流,使用的是工作窃取模式,在一个队列的任务执行完成之后,他会去其他没有执行完成的任务队列里面窃取尾部的任务来执行。
正常情况下我们计算一个大一点的数,这个耗时三十多秒
public void test(){ Long num = 100000000000L; long sum = 0; Instant start = Instant.now(); for(long x = 0;x<=num;x++){ sum+=x; } System.out.println(sum); Instant end = Instant.now(); System.out.println(Duration.between(start,end).toMillis()); }
用并行流,这个耗时13秒
Instant start = Instant.now(); long reduce = LongStream.rangeClosed(0, 100000000000L).parallel().reduce(0, Long::sum); Instant end = Instant.now(); System.out.println(reduce); System.out.println(Duration.between(start,end).toMillis());