Нужно подробное объяснение SupplyAsync и когда полные методы CompletableFuture под капотом - PullRequest
1 голос
/ 19 марта 2019

Я ищу документы JAVA API для CompletableFuture, где я наткнулся на эту конкретную строку,

Действия, предоставляемые для зависимых завершений неасинхронных методов, могут выполняться потоком, завершающим текущее CompletableFuture, или любым другим вызывающим объектом метода завершения.

Ссылка на описание ссылки (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html)

У меня есть путаница для этой конкретной фразы: «или любым другим вызывающим абонентом метода завершения»

Q1) Что это на самом деле означает? В связи с этим я сомневаюсь, что когдаComplete выполнит один и тот же поток или могут быть шансы оказаться в другом потоке?

Я использовал CompletableFuture с его методами supplyAsync () / runAsync () и whenComplete (). ()

CompletableFuture.supplyAsync(
    () -> {DO_SOMETHING}, myExecutor
).whenComplete((result, exception) -> {DO_SOMETHING});

Для supplyAsync () / runAsync () я использовал службу Executor. После этого результат этого метода (supplyAsync / runAsync) перейдет в метод whenComplete ().

Итак, вопрос в следующем: Q2) когда ВСЕГДА будет ВСЕГДА использовать тот же поток, который используется supplyAsync / runAsync после немедленного?

(Если метод whenComplete () выполняется в том же потоке, который инициирован моим Executor во время метода supplyAsync () / runAsync ().)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...