Java Callable Future Example

jedną z zalet Java executor Framework jest to, że możemy uruchamiać równoległe zadania, które mogą zwracać pojedynczy wynik po przetworzeniu zadań. API współbieżności Java osiąga to za pomocą następujących dwóch interfejsów Callable i Future.

Java Callable and Future interfaces

1.1. Interfejs

Callable posiada metodę call(). W tej metodzie musimy zaimplementować logikę zadania. Interfejs Callable jest interfejsem sparametryzowanym, co oznacza, że musimy podać typ danych, które zwróci metoda call().

2.2. Interfejs Future

Future posiada metody do uzyskiwania wyniku generowanego przez obiekt Callable i do zarządzania jego stanem.

Java Callable Future Example

w tym przykładzie tworzymy FactorialCalculator, który jest typu Callable. Oznacza to, że nadpisamy jej metodę call() i po obliczeniu, zwrócimy wynik z metody call(). Wynik ten można później pobrać z Future referencji posiadanej przez program główny.

teraz przetestujmy powyższy Kalkulator silni używając dwóch wątków i 4 liczb.

wyjście programu.

tutaj wysłaliśmy obiekt Callable do wykonania w executorze przy użyciu metody submit(). Metoda ta otrzymuje jako parametr obiekt Callable i zwraca obiekt Future, którego możemy użyć z dwoma głównymi celami–

  1. możemy kontrolować status zadania-możemy anulować zadanie i sprawdzić, czy zostało ono zakończone. W tym celu użyliśmy metody isDone(), aby sprawdzić, czy zadania zostały zakończone.
  2. możemy uzyskać wynik zwracany przez metodę call (). W tym celu użyliśmy metody get(). Metoda ta czeka, aż obiekt Callable zakończy wykonywanie metody call() i zwróci jej wynik.

    jeśli wątek jest przerwany, gdy metoda get() czeka na wynik, wyrzuca wyjątek InterruptedException. Jeśli metoda call() wyrzuca wyjątek, ta metoda wyrzuca wyjątek ExecutionException.

interfejs Future udostępnia inną wersję metody get() tzn. get(longtimeout,TimeUnitunit). Ta wersja metody get, jeśli wynik zadania nie jest dostępny, czeka na niego przez określony czas. Jeżeli określony okres czasu upłynie, a wynik nie jest jeszcze dostępny, metoda zwraca wartość null.

Szczęśliwej Nauki !!

czy ten post był pomocny?

daj nam znać, jeśli podobał Ci się post. Tylko w ten sposób możemy się poprawić.
Tak
Nie