Sobes.tech
Middle

Para que é que a classe Future é utilizada em Java?

sobes.tech IA

Resposta da IA

A classe Future representa o resultado de uma operação assíncrona. Permite obter o valor após o seu cálculo, verificar se a operação foi concluída, esperar que ela termine ou cancelá-la. É um elemento-chave para operações não bloqueantes em aplicações multithread.

Métodos principais:

  • get(): Aguarda a conclusão da operação e retorna o resultado. Chamada bloqueante.
  • get(long timeout, TimeUnit unit): Aguarda a conclusão da operação com um limite de tempo. Pode lançar TimeoutException.
  • isDone(): Retorna true se a operação foi concluída (com sucesso, erro ou cancelada).
  • isCancelled(): Retorna true se a operação foi cancelada.
  • cancel(boolean mayInterruptIfRunning): Tenta cancelar a tarefa.

Exemplo de uso:

import java.util.concurrent.*;

// Exemplo de tarefa assíncrona
class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        Thread.sleep(1000); // Simulação de trabalho
        return "Resultado do cálculo";
    }
}

public class FutureExample {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();

        // Inicia uma tarefa assíncrona
        Future<String> future = executor.submit(new MyCallable());

        System.out.println("Tarefa iniciada. A aguardar...");

        // Verifica o estado de forma não bloqueante
        while (!future.isDone()) {
            System.out.println("A tarefa ainda está a ser executada...");
            Thread.sleep(100);
        }

        // Obtém o resultado (chamada bloqueante)
        String result = future.get();
        System.out.println("Resultado obtido: " + result);

        // Encerra o executor
        executor.shutdown();
    }
}

Future é frequentemente usado juntamente com ExecutorService para gerir um grupo de threads e executar tarefas de forma assíncrona. Proporciona uma forma conveniente de interagir com os resultados de cálculos paralelos.