Sobes.tech
Middle

O que é FutureTask em Java?

sobes.tech IA

Resposta da IA

FutureTask — é uma classe que implementa as interfaces Runnable e Future, representando um cálculo assíncrono cancelável. Pode ser usada para envolver objetos Callable ou Runnable e sua execução posterior em uma thread.

Características principais:

  • Runnable: Pode ser passado para threads ou executores para execução.
  • Future: Permite obter o resultado do cálculo, verificar seu status (isDone()), cancelá-lo (cancel()) e bloquear até sua conclusão (get()).
  • Flexibilidade: Pode ser usado tanto para envolver Runnable existentes quanto para executar operações que retornam um resultado (Callable).

Exemplo de uso:

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ExecutionException;

// Tarefa que retorna um resultado
Callable<Integer> myCallable = () -> {
    // Execução de uma operação prolongada
    Thread.sleep(1000);
    return 42;
};

// Envolvendo Callable em FutureTask
FutureTask<Integer> futureTask = new FutureTask<>(myCallable);

// Criando uma thread para executar a tarefa
Thread thread = new Thread(futureTask);

// Iniciando a thread
thread.start();

try {
    // Obtendo o resultado (bloqueia até a conclusão)
    Integer result = futureTask.get();
    System.out.println("Resultado: " + result); // Resultado: 42
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}

// Verificando o status
System.out.println("Tarefa concluída: " + futureTask.isDone()); // Tarefa concluída: true