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çarTimeoutException.isDone(): Retornatruese a operação foi concluída (com sucesso, erro ou cancelada).isCancelled(): Retornatruese 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.