logo

Цаллабле вс Футуре у Јави

У Јави вишенитност омогућава да се задаци изводе истовремено побољшавајући перформансе и одзив. Традиционално програмери су користили Руннабле интерфејс за дефинисање задатака, али он има два главна ограничења: не може да врати резултат и не може да избаци проверене изузетке. Да би превазишла ове проблеме, Јава је у Јаву 5 увела интерфејсе за позивање и будућност.

азбука и бројеви

Интерфејс за позивање

Тхе Интерфејс који се може позвати представља задатак који враћа резултат и може изазвати изузетак. Сличан је Руннабле-у, али је флексибилнији јер може да врати вредност и избаци проверене изузетке.

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

Излаз
Result: 15 

Објашњење: Позивни задатак се доставља извршиоцу. Израчунава збир бројева од 1 до 5 и враћа резултат. Резултат се преузима помоћу футуре.гет() након што се задатак заврши.



Футуре Интерфаце

Тхе Будући интерфејс представља резултат асинхроног прорачуна. Када поднесете Цаллабле или Руннабле задатак у ЕкецуторСервице, он враћа Футуре објекат.

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

Излаз
Result: 30 

Објашњење: ТхеCallableзадатак израчунава10 + 2 and ExecutorService.submit()метода враћа аFutureобјекат. Коришћењеfuture.get()добијамо резултат када се израчунавање заврши.

Цаллабле вс Футуре

ФеатуреПозивноБудућност
Сврха Представља задатак који враћа резултатПредставља резултат асинхроног задатка
Ретурн Типе Враћа резултат када се извршиСадржи резултат који је вратио Цаллабле
Дефинисано у јава.утил.цонцуррент пакетјава.утил.цонцуррент пакет
Извршење Достављено ЕкецуторСервицеВратио ЕкецуторСервице.субмит()
Методе Има један метод цалл()Има методе као што је гет() исДоне() цанцел()
Обрада изузетака Може да избаци проверене изузеткеОбрађује резултате и изузетке након извршења
Употреба Дефинише шта да се извршиКонтролише надгледа и преузима резултат задатка
Креирај квиз