Я хотел бы уточнить поведение 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