logo

Callable vs Future v Javi

V Javi večnitnost omogoča sočasno izvajanje nalog, kar izboljša zmogljivost in odzivnost. Tradicionalno so razvijalci uporabljali vmesnik Runnable za definiranje nalog, vendar ima dve glavni omejitvi: ne more vrniti rezultata in ne more vrniti preverjenih izjem. Za premagovanje tega je Java uvedla vmesnika Callable in Future v Javi 5.

string.format java

Klicni vmesnik

The Priklicni vmesnik predstavlja nalogo, ki vrne rezultat in lahko povzroči izjemo. Podoben je Runnable, vendar je bolj prilagodljiv, saj lahko vrne vrednost in vrže preverjene izjeme.

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

Izhod
Result: 15 

Pojasnilo: Naloga, ki jo je mogoče poklicati, je predložena izvajalcu. Izračuna vsoto števil od 1 do 5 in vrne rezultat. Rezultat se pridobi z uporabo future.get() po končani nalogi.



Prihodnji vmesnik

The Prihodnji vmesnik predstavlja rezultat asinhronega računanja. Ko oddate opravilo, ki ga je mogoče klicati ali izvajati, ExecutorService, ta vrne objekt 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();  }  } } 

Izhod
Result: 30 

Pojasnilo: TheCallablenaloga izračuna10 + 2 and ExecutorService.submit()metoda vrne aFuturepredmet. Uporabafuture.get()rezultat dobimo, ko je izračun končan.

Kličljivo proti prihodnosti

FunkcijaKličljivoPrihodnost
Namen Predstavlja nalogo, ki vrne rezultatPredstavlja rezultat asinhrone naloge
Vrsta povratka Ob izvedbi vrne rezultatVsebuje rezultat, ki ga vrne Callable
Določeno v paket java.util.concurrentpaket java.util.concurrent
Izvedba Oddano ExecutorServiceVrne ExecutorService.submit()
Metode Ima eno metodo call()Ima metode, kot je get() isDone() cancel()
Obravnava izjem Lahko vrže preverjene izjemeObravnava rezultate in izjeme po izvedbi
Uporaba Določa, kaj naj se izvedeNadzor nadzira in pridobi rezultat naloge
Ustvari kviz