logo

Callable vs Future i Java

I Java lar multithreading oppgaver kjøres samtidig som forbedrer ytelsen og responsen. Tradisjonelt har utviklere brukt Runnable-grensesnittet for å definere oppgaver, men det har to hovedbegrensninger: det kan ikke returnere et resultat og kan ikke kaste sjekkede unntak. For å overvinne disse introduserte Java Callable og Future-grensesnittene i Java 5.

Anropbart grensesnitt

De Anropbart grensesnitt representerer en oppgave som returnerer et resultat og kan gi et unntak. Det ligner på Runnable, men mer fleksibelt siden det kan returnere en verdi og kaste sjekkede unntak.

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

Produksjon
Result: 15 

Forklaring: En Callable oppgave sendes til utførende. Den beregner summen av tall fra 1 til 5 og returnerer resultatet. Resultatet hentes ved hjelp av future.get() etter at oppgaven er ferdig.



Fremtidig grensesnitt

De Fremtidig grensesnitt representerer resultatet av en asynkron beregning. Når du sender en Callable eller Runnable oppgave til en ExecutorService, returnerer den et Future-objekt.

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

Produksjon
Result: 30 

Forklaring: DeCallableoppgaveberegninger10 + 2 and ExecutorService.submit()metoden returnerer enFuturegjenstand. Brukerfuture.get()vi får resultatet når beregningen er fullført.

Callable vs Future

TrekkRingbarFramtid
Hensikt Representerer en oppgave som returnerer et resultatRepresenterer resultatet av en asynkron oppgave
Returtype Returnerer et resultat når det utføresBeholder resultatet returnert av en Callable
Definert i java.util.concurrent-pakkejava.util.concurrent-pakke
Henrettelse Sendt til ExecutorServiceReturnert av ExecutorService.submit()
Metoder Har én metodekall()Har metoder som get() isDone() cancel()
Unntakshåndtering Kan kaste sjekkede unntakHåndterer resultater og unntak etter utførelse
Bruk Definerer hva som skal utføresKontroller overvåker og henter resultatet av en oppgave
Lag quiz