该列表正在拆分,并且使用公共池中的线程开始处理。更改代码以打印当前线程名称表明主调用线程也从拆分列表中处理,并且它的结果通常出现在公共池线程之前 - 大概是因为在公共线程开始处理第一个条目之前有一个小的延迟:
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.println(Thread.currentThread()+" i="+i));
System.out.println();
}
在我的机器上,所有输出首先来自主线程:
Thread[main,5,main] i=6
Thread[main,5,main] i=5
Thread[main,5,main] i=8
Thread[main,5,main] i=9
Thread[main,5,main] i=7
Thread[main,5,main] i=2
Thread[main,5,main] i=4
Thread[main,5,main] i=3
Thread[main,5,main] i=1
Thread[main,5,main] i=0
但在随后的运行中,工作与公共池更加平衡:
Thread[main,5,main] i=6
Thread[main,5,main] i=5
Thread[main,5,main] i=8
Thread[main,5,main] i=9
Thread[main,5,main] i=7
Thread[ForkJoinPool.commonPool-worker-5,5,main] i=2
Thread[ForkJoinPool.commonPool-worker-5,5,main] i=4
Thread[ForkJoinPool.commonPool-worker-5,5,main] i=3
Thread[ForkJoinPool.commonPool-worker-5,5,main] i=1
Thread[ForkJoinPool.commonPool-worker-5,5,main] i=0
Thread[main,5,main] i=6
Thread[main,5,main] i=5
Thread[ForkJoinPool.commonPool-worker-5,5,main] i=2
Thread[main,5,main] i=8
Thread[main,5,main] i=9
Thread[ForkJoinPool.commonPool-worker-7,5,main] i=1
Thread[ForkJoinPool.commonPool-worker-7,5,main] i=0
Thread[main,5,main] i=7
Thread[ForkJoinPool.commonPool-worker-5,5,main] i=4
Thread[ForkJoinPool.commonPool-worker-3,5,main] i=3