我有以下代码,它使用并行流打印列表的元素:
List<Integer> l = List.of(0,1,2,3,4,5,6,7,8,9);
for (int j = 0; j < 5; j++) {
l.parallelStream().forEach(i->System.out.print(i+" "));
System.out.println();
}
输出:
6 5 2 8 4 3 9 7 0 1
6 5 8 9 2 7 4 1 0 3
6 5 8 9 7 2 4 3 0 1
6 5 8 9 7 1 0 4 3 2
6 5 1 0 4 3 2 9 7 8
为什么平行流从 6
大多数时候?
为什么不从一开始呢 0
? 为什么不在中午呢?
1条答案
按热度按时间rxztt3cl1#
正在拆分列表,并使用公共池中的线程开始处理。将代码更改为打印当前线程名称表明,主调用线程也会从拆分列表中进行处理,其结果通常显示在公共池线程之前—可能是因为公共线程开始处理第一个条目之前有一个小的延迟:
在我的机器上,所有输出都是从主线程开始的:
但在随后的运行中,工作与公共池更加平衡: