logo

Callable vs Future a Java

A Java, el multithreading permet que les tasques s'executin simultàniament millorant el rendiment i la capacitat de resposta. Tradicionalment, els desenvolupadors utilitzaven la interfície Runnable per definir tasques, però té dues limitacions principals: no pot retornar un resultat i no pot llançar excepcions marcades. Per superar aquests, Java va introduir les interfícies Callable i Future a Java 5.

llista j

Interfície cridable

El Interfície cridable representa una tasca que retorna un resultat i pot llançar una excepció. És similar a Runnable, però més flexible, ja que pot retornar un valor i llançar excepcions marcades.

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();  } } 

Sortida
Result: 15 

Explicació: S'envia una tasca cridable a l'executor. Calcula la suma de nombres de l'1 al 5 i retorna el resultat. El resultat es recupera mitjançant future.get() un cop finalitzada la tasca.



Interfície futura

El Interfície futura representa el resultat d'un càlcul asíncron. Quan envieu una tasca cridable o executable a un ExecutorService, retorna un objecte 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();  }  } } 

Sortida
Result: 30 

Explicació: ElCallablecalcula la tasca10 + 2 and ExecutorService.submit()mètode retorna aFutureobjecte. Utilitzantfuture.get()obtenim el resultat un cop finalitzat el càlcul.

Callable vs Future

CaracterísticaCridableFutur
Propòsit Representa una tasca que retorna un resultatRepresenta el resultat d'una tasca asíncrona
Tipus de retorn Retorna un resultat quan s'executaConté el resultat retornat per un Callable
Definit en paquet java.util.concurrentpaquet java.util.concurrent
Execució Enviada a ExecutorServiceRetornat per ExecutorService.submit()
Mètodes Té una trucada de mètode ()Té mètodes com get() isDone() cancel()
Tractament d'excepcions Pot llançar excepcions marcadesGestiona els resultats i les excepcions després de l'execució
Ús Defineix què executarControla els monitors i recupera el resultat d'una tasca
Crea un qüestionari