logo

Callable vs Future u Javi

U Javi višenitnost omogućuje istovremeno izvođenje zadataka poboljšavajući performanse i odziv. Tradicionalno su programeri koristili Runnable sučelje za definiranje zadataka, ali ono ima dva glavna ograničenja: ne može vratiti rezultat i ne može izbaciti provjerene iznimke. Kako bi prevladala ove probleme, Java je uvela sučelja Callable i Future u Javi 5.

abeceda numerirana

Pozivno sučelje

The Pozivno sučelje predstavlja zadatak koji vraća rezultat i može izazvati iznimku. Sličan je Runnableu, ali je fleksibilniji jer može vratiti vrijednost i izbaciti provjerene iznimke.

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

Izlaz
Result: 15 

Obrazloženje: Pozivni zadatak se podnosi izvršitelju. Izračunava zbroj brojeva od 1 do 5 i vraća rezultat. Rezultat se dohvaća korištenjem future.get() nakon što zadatak završi.



Sučelje budućnosti

The Buduće sučelje predstavlja rezultat asinkronog računanja. Kada pošaljete Callable ili Runnable zadatak ExecutorService-u, on vraća 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();  }  } } 

Izlaz
Result: 30 

Obrazloženje: TheCallablezadatak izračunava10 + 2 and ExecutorService.submit()metoda vraća aFutureobjekt. Korištenjefuture.get()dobivamo rezultat nakon završetka izračuna.

Pozivi vs budućnost

ZnačajkaPozivBudućnost
Svrha Predstavlja zadatak koji vraća rezultatPredstavlja rezultat asinkronog zadatka
Vrsta povrata Vraća rezultat kada se izvršiSadrži rezultat koji vraća Callable
Definirano u java.util.concurrent paketjava.util.concurrent paket
Izvršenje Predano Izvršiteljskoj službiVratio ExecutorService.submit()
Metode Ima jednu metodu call()Ima metode poput get() isDone() cancel()
Rukovanje iznimkama Može izbaciti provjerene iznimkeObrađuje rezultate i iznimke nakon izvršenja
Korištenje Definira što treba izvršitiKontrole nadziru i dohvaćaju rezultat zadatka
Napravi kviz