Java Callable Future Example
jednou z výhod rámce Java executor je, že můžeme spouštět souběžné úkoly, které mohou po zpracování úkolů vrátit jediný výsledek. Java Concurrency API toho dosahuje pomocí následujících dvou rozhraní Callable a Future.
Java Callable a budoucí rozhraní
1.1. Callable
Callable rozhraní má metodu call(). V této metodě musíme implementovat logiku úkolu. Callable rozhraní je parametrizované rozhraní, což znamená, že musíme uvést typ dat call() metoda vrátí.
2.2. Budoucí
Future rozhraní má metody pro získání výsledku generovaného objektem Callable A pro správu jeho stavu.
Java Callable Future Example
v tomto příkladu vytváříme FactorialCalculator, který je typu Callable. To znamená, že přepíšeme metodu call() a po výpočtu vrátíme výsledek z metody call(). Tento výsledek lze později získat z Future reference držené hlavním programem.
nyní vyzkoušíme výše uvedenou faktoriální kalkulačku pomocí dvou vláken a 4 čísel.
výstup programu.
zde jsme odeslali Callable objekt, který má být proveden v exekutorovi metodou submit(). Tato metoda přijímá Callable objekt jako parametr a vrátí Future objekt, který můžeme použít na dva hlavní cíle–
- můžeme kontrolovat stav úkolu – můžeme zrušit úlohu a zkontrolujte, jestli to má hotové. Za tímto účelem jsme použili metodu
isDone()ke kontrole, zda byly úkoly dokončeny. - můžeme získat výsledek vrácený metodou call (). Pro tento účel jsme použili metodu
get(). Tato metoda čeká, dokud objektCallablenedokončí provedení metodycall()a nevrátí svůj výsledek.pokud je vlákno přerušeno, zatímco metoda
get()čeká na výsledek, vyvoláInterruptedExceptionvýjimku. Pokud metodacall()vyvolá výjimku, tato metoda vyvolá výjimkuExecutionException.
rozhraní Future poskytuje další verzi metody get(), tj. get (longtimeout, TimeUnitunit). Tato verze metody get, pokud výsledek úlohy není k dispozici, na ni čeká po stanovenou dobu. Pokud uplyne zadané časové období a výsledek ještě není k dispozici, metoda vrátí hodnotu null.
Šťastné Učení !!