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.
Javaimport 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.
Javaimport 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ística | Cridable | Futur |
|---|---|---|
| Propòsit | Representa una tasca que retorna un resultat | Representa el resultat d'una tasca asíncrona |
| Tipus de retorn | Retorna un resultat quan s'executa | Conté el resultat retornat per un Callable |
| Definit en | paquet java.util.concurrent | paquet java.util.concurrent |
| Execució | Enviada a ExecutorService | Retornat 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 marcades | Gestiona els resultats i les excepcions després de l'execució |
| Ús | Defineix què executar | Controla els monitors i recupera el resultat d'una tasca |