我编写了以下代码来学习parallelStream。
public class Main {
public static void main(String[] args) {
List<Integer> set = IntStream.iterate(2000000, x -> x - 1)
.boxed()
.limit(2000000)
.collect(Collectors.toList());
for (int x = 0; x < 5; x++) {
//================= parallelStream ===============
LocalTime start = LocalTime.now();
set.parallelStream().sorted().findFirst().get();
Duration duration = Duration.between(start, LocalTime.now());
System.out.println("parallelStream: " + duration.toMillis());
}
}
}
每次运行此程序时,我发现第一个并行流总是比后续并行流慢得多。
以下是一些测试数据:
parallelStream: 113
parallelStream: 24
parallelStream: 41
parallelStream: 14
parallelStream: 14
Process finished with exit code 0
-
parallelStream: 154
parallelStream: 25
parallelStream: 47
parallelStream: 13
parallelStream: 15
Process finished with exit code 0
请注意,第一个并行流操作总是需要几倍于后续并行流成本。
这是为什么?如果有人可以帮助我,我将不胜感激。