Middle
Šta je FutureTask u Javi?
sobes.tech АИ
Одговор од АИ
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