Назад к вопросам
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