Управляйте потоком с помощью CompletableFuture.Когда вы завершите

#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 . Короче говоря, да, введение непроверенной потоковой передачи означает, что ваш порядок выполнения здесь не гарантирован (может пойти в любом случае).