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.
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(); } }
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.
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(); } } }
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
| Trekk | Ringbar | Framtid |
|---|---|---|
| Hensikt | Representerer en oppgave som returnerer et resultat | Representerer resultatet av en asynkron oppgave |
| Returtype | Returnerer et resultat når det utføres | Beholder resultatet returnert av en Callable |
| Definert i | java.util.concurrent-pakke | java.util.concurrent-pakke |
| Henrettelse | Sendt til ExecutorService | Returnert av ExecutorService.submit() |
| Metoder | Har én metodekall() | Har metoder som get() isDone() cancel() |
| Unntakshåndtering | Kan kaste sjekkede unntak | Håndterer resultater og unntak etter utførelse |
| Bruk | Definerer hva som skal utføres | Kontroller overvåker og henter resultatet av en oppgave |