Я ищу документы 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 ().)