Когда начинается выполнение CompletableFuture в Java?

«Когда начинается выполнение CompletableFuture в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Выполнение CompletableFuture начинается в одном из следующих случаев:

1. При явном завершении:

  • complete(T value) – ручное завершение с результатом.
  • completeExceptionally(Throwable ex) – ручное завершение с исключением.

2. При создании асинхронной задачи: Методы с суффиксом Async запускают выполнение немедленно в общем или указанном пуле потоков:

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // Этот код выполняется сразу после создания future
    return "Результат";
});

3. При вызове терминальной операции: Если future ещё не завершён, выполнение запускается при вызове:

  • Блокирующих методов: get(), join()
  • Методов обратного вызова: thenAccept(), thenApply(), whenComplete()

Важно: Без явного завершения или терминальной операции CompletableFuture может оставаться невыполненным, что приводит к утечкам ресурсов.