Sobes.tech
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