Что такое Future в Java и для чего он используется?

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

Ответ

Future в Java — это интерфейс, представляющий результат асинхронной операции. Он позволяет проверять, завершена ли задача, ожидать её завершения и получать результат. Используется с ExecutorService для неблокирующего выполнения кода в отдельном потоке.

Ключевые методы:

  • V get() — блокирует вызывающий поток до получения результата; может выбросить InterruptedException или ExecutionException.
  • boolean isDone() — возвращает true, если задача завершена (нормально, с ошибкой или отменой).
  • boolean cancel(boolean mayInterruptIfRunning) — пытается отменить выполнение задачи.

Пример использования:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(() -> {
    // Длительная операция
    Thread.sleep(1000);
    return 42;
});

// Неблокирующая проверка
while (!future.isDone()) {
    System.out.println("Задача ещё выполняется...");
    Thread.sleep(200);
}

// Получение результата (теперь он готов)
Integer result = future.get();
System.out.println("Результат: " + result);

executor.shutdown();

Недостатки: Отсутствие встроенной поддержки callback-ов и цепочек вызовов, что усложняет композицию асинхронных операций. В Java 8+ для сложных сценариев рекомендуется использовать CompletableFuture, который предоставляет более богатый API.