Java Callable Future Example
a Java executor framework egyik előnye, hogy egyidejű feladatokat futtathatunk, amelyek a feladatok feldolgozása után egyetlen eredményt adhatnak vissza. A Java Concurrency API ezt a következő két interfésszel éri el: Callable
és Future
.
Java hívható és jövőbeli interfészek
1.1. Hívható
Callable
interfész a call()
módszer. Ebben a módszerben egy feladat logikáját kell megvalósítanunk. A Callable
interfész egy paraméterezett interfész, ami azt jelenti, hogy meg kell adnunk a call()
metódus által visszaadott adatok típusát.
2.2. A Future
Future
interfésznek vannak módszerei a Callable
objektum által generált eredmény elérésére és állapotának kezelésére.
Java hívható jövőbeli példa
ebben a példában egy FactorialCalculator
– et hozunk létre, amely Callable
típusú. Ez azt jelenti, hogy felülírjuk a call()
metódust, és a számítás után visszaadjuk az eredményt a call()
metódusból. Ezt az eredményt később a főprogram Future
hivatkozásából lehet letölteni.
most teszteljük a fenti faktoriális számológépet két szál és 4 szám segítségével.
Program kimenet.
itt egy Callable
objektumot küldtünk végrehajtásra egy végrehajtóban a submit()
módszerrel. Ez a módszer egy Callable
objektumot kap paraméterként, és egy Future
objektumot ad vissza, amelyet két fő célkitűzéssel használhatunk–
- szabályozhatjuk a feladat állapotát – törölhetjük a feladatot, és ellenőrizhetjük, hogy befejeződött-e. Erre a célra a
isDone()
módszert használtuk annak ellenőrzésére, hogy a feladatok befejeződtek-e. - megkaphatjuk az eredményt a call () módszerrel. Erre a célra a
get()
módszert használtuk. Ez a metódus megvárja, amíg aCallable
objektum befejezi acall()
metódus végrehajtását, és visszaadja az eredményét.ha a szál megszakad, miközben a
get()
metódus az eredményre vár, akkorInterruptedException
kivételt dob. Ha acall()
metódus kivételt dob, akkor ez a metódusExecutionException
kivételt dob.
a Future
felület a get()
metódus egy másik változatát biztosítja,azaz get(longtimeout, TimeUnitunit). A get metódus ezen verziója, ha a feladat eredménye nem érhető el, a megadott ideig várja. Ha a megadott időtartam eltelik, és az eredmény még nem érhető el, a metódus null
értéket ad vissza.
Boldog Tanulást!!