Ответ
Future — это интерфейс из пакета java.util.concurrent, представляющий результат асинхронной (выполняемой в отдельном потоке) операции.
Основное назначение: Позволяет получить результат вычисления, которое ещё не завершено, и контролировать его выполнение.
Ключевые методы:
V get()— блокирует текущий поток до завершения задачи, затем возвращает результат.V get(long timeout, TimeUnit unit)— блокирует поток с таймаутом.boolean isDone()— неблокирующая проверка, завершена ли задача.boolean cancel(boolean mayInterruptIfRunning)— попытка отменить выполнение задачи.boolean isCancelled()— проверяет, была ли задача отменена.
Пример использования с ExecutorService:
ExecutorService executor = Executors.newSingleThreadExecutor();
// Запускаем асинхронную задачу, возвращающую Integer
Future<Integer> future = executor.submit(() -> {
Thread.sleep(1000); // Имитация долгой операции
return 42;
});
// Делаем что-то ещё, пока задача выполняется
System.out.println("Задача выполняется...");
try {
// Блокируемся и ждём результат (максимум 2 секунды)
Integer result = future.get(2, TimeUnit.SECONDS);
System.out.println("Результат: " + result);
} catch (TimeoutException e) {
System.err.println("Задача выполняется слишком долго");
future.cancel(true); // Прерываем задачу
}
executor.shutdown();
Эволюция: В современном Java для асинхронного программирования часто используют CompletableFuture (Java 8+), который предоставляет более богатый API: цепочки вызовов, комбинирование задач и неблокирующую обработку результатов.