Java Callable Future Example

unul dintre beneficiile Java executor framework este că putem rula sarcini concurente care pot returna un singur rezultat după procesarea sarcinilor. API-ul de concurență Java realizează acest lucru cu următoarele două interfețe Callable și Future.

interfețe java apelabile și viitoare

1.1. Callable

Callable interfața are metoda call(). În această metodă, trebuie să implementăm logica unei sarcini. Interfața Callable este o interfață parametrizată, ceea ce înseamnă că trebuie să indicăm tipul de date pe care metoda call() o va returna.

2.2. Interfața viitoare

Future are metode pentru a obține rezultatul generat de un obiect Callable și pentru a gestiona starea acestuia.

Java exemplu viitor nevărsat

în acest exemplu, vom crea un FactorialCalculator care este de tip Callable. Înseamnă că vom trece peste metoda call() și după calcul, vom returna rezultatul din metoda call(). Acest rezultat mai târziu pot fi preluate de la Future referință deținute de programul principal.

acum să testăm calculatorul factorial de mai sus folosind două fire și 4 numere.

ieșire Program.

aici am trimis un obiect Callable pentru a fi executat într-un executor folosind metoda submit(). Această metodă primește un obiect Callable ca parametru și returnează un obiect Future pe care îl putem folosi cu două obiective principale–

  1. putem controla starea sarcinii – putem anula sarcina și putem verifica dacă s-a terminat. În acest scop, am folosit metoda isDone() pentru a verifica dacă sarcinile s-au terminat.
  2. putem obține rezultatul returnat prin metoda call (). În acest scop, am folosit metoda get(). Această metodă așteaptă până când obiectul Callable a terminat executarea metodei call() și și-a returnat rezultatul.

    dacă firul este întrerupt în timp ce metoda get() așteaptă rezultatul, acesta aruncă o excepție InterruptedException. Dacă metoda call() aruncă o excepție, această metodă aruncă o excepție ExecutionException.

interfața Future oferă o altă versiune a metodei get(), adică get (longtimeout,TimeUnitunit). Această versiune a metodei get, dacă rezultatul sarcinii nu este disponibil, îl așteaptă pentru timpul specificat. Dacă perioada de timp specificată trece și rezultatul nu este încă disponibil, metoda returnează o valoare null.

Învățare Fericită !!

a fost utilă această postare?

anunță-ne dacă ți-a plăcut postarea. Doar așa ne putem îmbunătăți.
Da
Nu