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–

  1. 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.
  2. můžeme získat výsledek vrácený metodou call (). Pro tento účel jsme použili metodu get(). Tato metoda čeká, dokud objekt Callable nedokončí provedení metody call() 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 metoda call() vyvolá výjimku, tato metoda vyvolá výjimku ExecutionException.

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í !!

byl tento příspěvek užitečný?

dejte nám vědět, pokud se vám příspěvek líbil. Jedině tak se můžeme zlepšit.
Ano
Ne