Назад к вопросам
Middle
75
questionbank
Что такое Future в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Future в Java представляет собой результат асинхронной операции. Он содержит методы для проверки завершенности операции, дожидания ее завершения и получения ее результата.
Основные методы:
boolean isDone(): Возвращаетtrue, если задача завершена.V get(): Ожидает завершения задачи и возвращает ее результат. Если задача выбросила исключение, его выбрасывает и этот метод. Блокирующий вызов.V get(long timeout, TimeUnit unit): Ожидает завершения задачи в течение указанного времени и возвращает результат. При таймауте выбрасываетTimeoutException. Блокирующий вызов.boolean cancel(boolean mayInterruptIfRunning): Пытается отменить выполнение задачи. Возвращаетfalse, если задача уже завершена, уже отменена или не может быть отменена по другим причинам.boolean isCancelled(): Возвращаетtrue, если задача была отменена до нормального завершения.
Future обычно возвращается при отправке Callable или Runnable в ExecutorService.
Пример использования:
import java.util.concurrent.*;
// Пример Callable, который выполняет какую-то работу
public class MyTask implements Callable<String> {
private final String name;
public MyTask(String name) {
this.name = name;
}
@Override
public String call() {
try {
TimeUnit.SECONDS.sleep(2); // Имитация долгой работы
System.out.println("Task \"" + name + "\" finished");
return "Result of " + name;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return "Task \"" + name + "\" interrupted";
}
}
}
import java.util.concurrent.*;
public class FutureExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2);
// Отправляем задачу на выполнение и получаем Future
Future<String> future = executor.submit(new MyTask("Task 1"));
System.out.println("Task submitted");
// Проверяем, завершена ли задача
while (!future.isDone()) {
System.out.println("Task is not yet done...");
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
try {
// Получаем результат выполнения задачи
String result = future.get();
System.out.println("Task completed. Result: " + result);
} catch (InterruptedException | ExecutionException e) {
System.err.println("Error executing task: " + e.getMessage());
} finally {
executor.shutdown(); // Обязательно завершаем ExecutorService
}
}
}
Future является базовым интерфейсом. В Java 8 появился CompletableFuture, который предоставляет более широкие возможности для композиции и обработки асинхронных операций.