Ответ
Выполнение 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 может оставаться невыполненным, что приводит к утечкам ресурсов.