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