logo

Callable vs Future v Jave

V Java multithreading umožňuje súbežné spustenie úloh, čím sa zlepšuje výkon a odozva. Vývojári tradične používali na definovanie úloh rozhranie Runnable, ale má dve hlavné obmedzenia: nemôže vrátiť výsledok a nemôže vyvolať začiarknuté výnimky. Na prekonanie týchto javov Java zaviedla rozhrania Callable a Future v jazyku Java 5.

Volateľné rozhranie

The Volateľné rozhranie predstavuje úlohu, ktorá vracia výsledok a môže vyvolať výnimku. Je to podobné ako Runnable, ale flexibilnejšie, pretože môže vrátiť hodnotu a vyvolať začiarknuté výnimky.

npm vyčistiť vyrovnávaciu pamäť
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();  } } 

Výstup
Result: 15 

Vysvetlenie: Realizátorovi sa odošle výzva, ktorú možno vyhlásiť. Vypočíta súčet čísel od 1 do 5 a vráti výsledok. Výsledok sa získa pomocou future.get() po dokončení úlohy.



Budúce rozhranie

The Budúce rozhranie predstavuje výsledok asynchrónneho výpočtu. Keď odošlete Callable alebo Runnable úlohu ExecutorService, vráti budúci objekt.

rovná sa metóda java
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();  }  } } 

Výstup
Result: 30 

Vysvetlenie: TheCallableúloha počíta10 + 2 and ExecutorService.submit()metóda vracia aFutureobjekt. Používaniefuture.get()výsledok dostaneme po dokončení výpočtu.

Volateľné verzus budúcnosť

FunkciaVolateľnéBudúcnosť
Účel Predstavuje úlohu, ktorá vráti výsledokPredstavuje výsledok asynchrónnej úlohy
Typ návratu Po vykonaní vráti výsledokObsahuje výsledok vrátený Callable
Definované v java.util.concurrent balíkjava.util.concurrent balík
Poprava Odoslané ExecutorServiceVrátené ExecutorService.submit()
Metódy Má jednu metódu call()Má metódy ako get() isDone() cancel()
Spracovanie výnimiek Môže vyvolať začiarknuté výnimkySpracúva výsledky a výnimky po vykonaní
Použitie Definuje, čo sa má vykonaťOvláda monitoruje a získava výsledok úlohy
Vytvoriť kvíz