并行流
...大约 1 分钟
获取并行流
我们可以通过两种方式来获取并行流。
- 通过List接口中的parallelStream方法来获取
- 通过已有的串行流转换为并行流(parallel)
List<Integer> list = new ArrayList<>();
// 通过List 接口 直接获取并行流
Stream<Integer> integerStream = list.parallelStream();
// 将已有的串行流转换为并行流
Stream<Integer> parallel = Stream.of(1, 2, 3).parallel();
并行流和串行流对比
LongStream.rangeClosed(0, times)
是创建一个包含指定范围内所有 long 值的有序序列的方法。
具体含义如下:
0
是指定范围的起始值。times
是指定范围的结束值。
这个方法会生成一个从起始值到结束值(包括结束值)的有序序列,每个值都是 long
类型。
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.stream.LongStream;
public class StreamAPITest {
private static final long times = 500000000;
private long start;
@Before
public void before() {
start = System.currentTimeMillis();
}
@After
public void end() {
long end = System.currentTimeMillis();
System.out.println("消耗时间:" + (end - start));
}
/**
* 普通for循环 消耗时间:138
*/
@Test
public void test01() {
System.out.println("普通for循环:");
long res = 0;
for (int i = 0; i < times; i++) {
res += i;
}
System.out.println(res);
}
/**
* 串行流处理
* 消耗时间:107
*/
@Test
public void test02() {
System.out.println("串行流:serialStream");
long reduce = LongStream.rangeClosed(0, times)
.reduce(0, Long::sum);
System.out.println(reduce);
}
/**
* 并行流处理 消耗时间:84
*/
@Test
public void test03() {
System.out.println("并行流:parallelStream");
long reduce = LongStream.rangeClosed(0, times)
.parallel()
.reduce(0, Long::sum);
System.out.println(reduce);
}
}