并行流与串行流

1、概述

并行流就是把一个内容分成多个数据块,并用不同的线程分 别处理每个数据块的流。
Java 8 中将并行进行了优化,我们可以很容易的对数据进行并 行操作。Stream API 可以声明性地通过 parallel() 与 sequential() 在并行流与顺序流之间进行切换。

2、实例

若我们需要计算从0到1000000000L的累计和,若是普通的从0加到1000000000L,势必对cpu的利用率不高,我们做个测试
1、普通的累加和:

long start = System.currentTimeMillis();
		
		long sum = 0L;
		
		for (long i = 0L; i <= 1000000000L; i++) {
			sum += i;
		}
		
		System.out.println(sum);
		
		long end = System.currentTimeMillis();
		
		System.out.println("耗费的时间为: " + (end - start));

java8新特性--并行流与串行流_算法
2、采用并行流计算

long start = System.currentTimeMillis();
		Long sum1 = LongStream.rangeClosed(0L, 1000000000L)
							 .parallel()
							 .reduce(0,Long::sum);
		
		System.out.println(sum1);
		long end = System.currentTimeMillis();
		
		System.out.println("耗费的时间为: " + (end - start));

java8新特性--并行流与串行流_java8_02

从结果来看,差距并不是很大,有时候并行流执行时间比普通的累计还长,是因为并行流执行的时候会递归将计算进行差分,最后再将拆分的结果合并,会消耗掉一部分时间。所以,可以增大数据量去测试,效果就会很明显。

加大数据量,计算从0到10000000000L
1、普通累加和:
java8新特性--并行流与串行流_java_03
2、并行流计算
java8新特性--并行流与串行流_并行流_04

可以看到,数据已经溢出了,但是我们观察消耗时间可以发现,数据量越大,并行流的优势越明显