logo

Chamável vs Futuro em Java

Em Java, o multithreading permite que tarefas sejam executadas simultaneamente, melhorando o desempenho e a capacidade de resposta. Tradicionalmente, os desenvolvedores usavam a interface Runnable para definir tarefas, mas ela tem duas limitações principais: ela não pode retornar um resultado e não pode lançar exceções verificadas. Para superar isso, o Java introduziu as interfaces Callable e Future no Java 5.

comparação de string java

Interface chamável

O Interface chamável representa uma tarefa que retorna um resultado e pode lançar uma exceção. É semelhante ao Runnable, mas mais flexível, pois pode retornar um valor e lançar exceções verificadas.

Java
import java.util.concurrent.*; public class CallableExample {  public static void main(String[] args) throws Exception {  ExecutorService executor = Executors.newSingleThreadExecutor();  Callable<Integer> task = () -> {  int sum = 0;  for (int i = 1; i <= 5; i++) sum += i;  return sum; // returns result  };  Future<Integer> future = executor.submit(task);  System.out.println('Result: ' + future.get());   executor.shutdown();  } } 

Saída
Result: 15 

Explicação: Uma tarefa chamável é enviada ao executor. Ele calcula a soma dos números de 1 a 5 e retorna o resultado. O resultado é recuperado usando future.get() após o término da tarefa.



Interface Futura

O Interface futura representa o resultado de uma computação assíncrona. Quando você envia uma tarefa Callable ou Runnable para um ExecutorService, ele retorna um objeto Future.

Java
import java.util.concurrent.*; public class CallableFutureExample {  public static void main(String[] args) {  ExecutorService executor = Executors.newSingleThreadExecutor();  Future<Integer> future = executor.submit(() -> 10 + 20);  try {  Integer result = future.get(); // waits but returns instantly  System.out.println('Result: ' + result);  } catch (Exception e) {  e.printStackTrace();  } finally {  executor.shutdown();  }  } } 

Saída
Result: 30 

Explicação: OCallablecomputação de tarefa10 + 2 and ExecutorService.submit()método retorna umFutureobjeto. Usandofuture.get()obtemos o resultado assim que o cálculo for concluído.

Exigível vs Futuro

RecursoChamávelFuturo
Propósito Representa uma tarefa que retorna um resultadoRepresenta o resultado de uma tarefa assíncrona
Tipo de retorno Retorna um resultado quando executadoContém o resultado retornado por um Callable
Definido em pacote java.util.concurrentpacote java.util.concurrent
Execução Enviado para ExecutorServiceRetornado por ExecutorService.submit()
Métodos Tem uma chamada de método()Possui métodos como get() isDone() cancel()
Tratamento de exceções Pode lançar exceções verificadasLida com resultados e exceções após a execução
Uso Define o que executarControla, monitora e recupera o resultado de uma tarefa
Criar questionário