У Јави вишенитност омогућава да се задаци изводе истовремено побољшавајући перформансе и одзив. Традиционално програмери су користили Руннабле интерфејс за дефинисање задатака, али он има два главна ограничења: не може да врати резултат и не може да избаци проверене изузетке. Да би превазишла ове проблеме, Јава је у Јаву 5 увела интерфејсе за позивање и будућност.
азбука и бројеви
Интерфејс за позивање
Тхе Интерфејс који се може позвати представља задатак који враћа резултат и може изазвати изузетак. Сличан је Руннабле-у, али је флексибилнији јер може да врати вредност и избаци проверене изузетке.
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(); } }
Излаз
Result: 15
Објашњење: Позивни задатак се доставља извршиоцу. Израчунава збир бројева од 1 до 5 и враћа резултат. Резултат се преузима помоћу футуре.гет() након што се задатак заврши.
Футуре Интерфаце
Тхе Будући интерфејс представља резултат асинхроног прорачуна. Када поднесете Цаллабле или Руннабле задатак у ЕкецуторСервице, он враћа Футуре објекат.
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(); } } }
Излаз
Result: 30
Објашњење: ТхеCallableзадатак израчунава10 + 2 and ExecutorService.submit()метода враћа аFutureобјекат. Коришћењеfuture.get()добијамо резултат када се израчунавање заврши.
Цаллабле вс Футуре
| Феатуре | Позивно | Будућност |
|---|---|---|
| Сврха | Представља задатак који враћа резултат | Представља резултат асинхроног задатка |
| Ретурн Типе | Враћа резултат када се изврши | Садржи резултат који је вратио Цаллабле |
| Дефинисано у | јава.утил.цонцуррент пакет | јава.утил.цонцуррент пакет |
| Извршење | Достављено ЕкецуторСервице | Вратио ЕкецуторСервице.субмит() |
| Методе | Има један метод цалл() | Има методе као што је гет() исДоне() цанцел() |
| Обрада изузетака | Може да избаци проверене изузетке | Обрађује резултате и изузетке након извршења |
| Употреба | Дефинише шта да се изврши | Контролише надгледа и преузима резултат задатка |