The list is being split and processing starts using threads from the common pool. Changing your code to print the current thread name shows that the main calling thread also processes from the split list and it's results often appear ahead of common pool threads - presumably as there is a small lag before common threads start processing first entry:
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();
}
On my machine ALL output came from main thread first go:
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
But on subsequent runs the work was more balanced with the common pool:
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