我想澄清一下Java并行流的行为。如果我像下面展示的那样使用并行流,我能否将其视为保证在所有并行任务执行完毕之后才会打印代码中显示的“应该发生在最后”的那行?
public static void main(String[] args) {
Stream.of(1, 2, 3, 5, 7, 8, 9, 10, 11, 23, 399, 939).parallel().forEach(
integer -> System.out
.println(Thread.currentThread().getName() + ", for number " + integer));
System.out.println("Should happen at the end");
}
这些重复的试验总是可预见地在最后打印出“应该发生在结尾”,如下所示。这可能是因为
main
线程也用来处理一些请求。在某些情况下,是否可能不使用main
线程,在那种情况下,“应该发生在结尾”会在所有ForkJoinPool.commonPool-worker
完成执行任务之前打印出来?main, for number 7
main, for number 6
ForkJoinPool.commonPool-worker-9, for number 3
ForkJoinPool.commonPool-worker-9, for number 4
ForkJoinPool.commonPool-worker-4, for number 1
ForkJoinPool.commonPool-worker-4, for number 10
ForkJoinPool.commonPool-worker-2, for number 2
ForkJoinPool.commonPool-worker-11, for number 5
ForkJoinPool.commonPool-worker-9, for number 8
main, for number 9
Should happen at the end