#java #java-8
Вопрос:
Если у меня есть следующая структура в коде:
if (some_condition) {
Foo.foobar().whenComplete((res, err) -> {System.out.println("hello1");})
}
System.out.println("hello2");
Может ли быть гонка между печатью «hello1» и «hello2»? Или «hello1» всегда будет печататься перед «hello2»?
Комментарии:
1. На самом деле я бы сказал, что в большинстве ситуаций вполне вероятно, что
"hello2"
сначала будет напечатано, если не#foobar
возвращать уже заполненноеCompletableFuture
. Короче говоря, да, введение непроверенной потоковой передачи означает, что ваш порядок выполнения здесь не гарантирован (может пойти в любом случае).