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 objektCallable
nedokončí 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áInterruptedException
vý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í !!