Mediumfuture
Что такое Future и CompletableFuture?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Future<V> (Java 5) — результат асинхронного вычисления. get() блокирует до готовности, isDone(), cancel(). Ограничения: нельзя вручную complete, нельзя цепочки, нет callback-ов. CompletableFuture<V> (Java 8) — Future с callback-ами и композицией, аналог Promise в JS.
// Future — только блокирующее get
Future<Integer> f = executor.submit(callable);
Integer r = f.get(); // блокирует
// CompletableFuture — композиция без blocking
CompletableFuture<Integer> cf = CompletableFuture
.supplyAsync(() -> fetch())
.thenApply(x -> x + 1)
.thenCompose(x -> CompletableFuture.supplyAsync(() -> x * 2)) // flatmap
.exceptionally(e -> -1);
cf.complete(42); // можно вручную
cf.completeExceptionally(ex);
CompletableFuture.allOf(cf1, cf2).join();Применения: composition async operations, parallel API calls, scatter-gather. Минусы: debug сложно (нет stacktrace через callbacks).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.