Назад к вопросам
Middle
93
questionbank
Что такое FutureTask в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
FutureTask — это реализующий интерфейсы Runnable и Future класс, который представляет собой отменяемое асинхронное вычисление. Он может быть использован для обертывания Callable или Runnable объектов и их последующего выполнения в потоке.
Ключевые особенности:
Runnable: Может быть передан в потоки или исполнители для выполнения.Future: Позволяет получить результат вычисления, проверить его статус (isDone()), отменить (cancel()) и блокироваться до завершения (get()).- Гибкость: Может быть использован как для обертывания существующих
Runnable, так и для выполнения операций, возвращающих результат (Callable).
Пример использования:
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ExecutionException;
// Задача, возвращающая результат
Callable<Integer> myCallable = () -> {
// Выполнение длительной операции
Thread.sleep(1000);
return 42;
};
// Обертываем Callable в FutureTask
FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
// Создаем поток для выполнения задачи
Thread thread = new Thread(futureTask);
// Запускаем поток
thread.start();
try {
// Получаем результат (блокируется до завершения)
Integer result = futureTask.get();
System.out.println("Результат: " + result); // Результат: 42
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
// Проверка статуса
System.out.println("Задача выполнена: " + futureTask.isDone()); // Задача выполнена: true