Ответ
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.