Middle
Cos'è FutureTask in Java?
sobes.tech AI
Risposta dell'AI
FutureTask — è una classe che implementa le interfacce Runnable e Future, e rappresenta un calcolo asincrono cancellabile. Può essere utilizzata per avvolgere oggetti Callable o Runnable e la loro successiva esecuzione in un thread.
Caratteristiche principali:
Runnable: Può essere passato ai thread o agli esecutori per l'esecuzione.Future: Permette di ottenere il risultato del calcolo, verificare il suo stato (isDone()), cancellarlo (cancel()) e bloccare fino al suo completamento (get()).- Flessibilità: Può essere usato sia per avvolgere
Runnableesistenti che per eseguire operazioni che restituiscono un risultato (Callable).
Esempio di utilizzo:
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ExecutionException;
// Compito che restituisce un risultato
Callable<Integer> myCallable = () -> {
// Esecuzione di un'operazione lunga
Thread.sleep(1000);
return 42;
};
// Avvolgere Callable in FutureTask
FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
// Creare un thread per eseguire il compito
Thread thread = new Thread(futureTask);
// Avviare il thread
thread.start();
try {
// Ottenere il risultato (si blocca fino al completamento)
Integer result = futureTask.get();
System.out.println("Risultato: " + result); // Risultato: 42
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
// Verificare lo stato
System.out.println("Compito completato: " + futureTask.isDone()); // Compito completato: true