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 подскажет развёрнутый ответ в реальном времени.