6.1 Végrehajtható objektumok

Elérkeztünk tehát a csomag legnagyobb részéhez. Leírja az aszinkron feladatok futtatására szolgáló interfészeket, amelyek lehetővé teszik az eredmények elérését a Future és Callable felületeken, valamint a szálkészletek létrehozásához szükséges szolgáltatásokat és gyárakat: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.

A jobb megértés érdekében végezzük el az interfészek és osztályok egy kis dekompozícióját.

6.2 Futtatható objektumok megvalósításai

Future<V>egy csodálatos felület az aszinkron műveletek eredményeinek lekéréséhez. A legfontosabb módszer itt a get metódus, amely blokkolja az aktuális szálat (időkorláttal vagy anélkül), amíg egy aszinkron művelet egy másik szálon be nem fejeződik. Vannak további módszerek is a művelet megszakítására és az aktuális állapot ellenőrzésére. A FutureTask osztályt gyakran használják megvalósításként.

RunnableFuture<V>- ha a Future a Client API interfésze, akkor a RunnableFuture felület már használatban van az aszinkron rész indítására. A run() metódus sikeres befejezése befejezi az aszinkron műveletet, és lehetővé teszi az eredmények lekérését a get metóduson keresztül.

Callable<V>- A Runnable interfész kiterjesztett analógja aszinkron műveletekhez. Lehetővé teszi egy begépelt érték visszaadását és egy ellenőrzött kivétel dobását. Annak ellenére, hogy ez a felület nem rendelkezik run() metódussal, sok java.util.concurrent osztály támogatja azt a Runnable mellett.

FutureTask<V>— a Future/RunnableFuture interfész megvalósítása. Egy aszinkron művelet bemenetként kerül be az egyik konstruktorba futtatható vagy hívható objektumok formájában. Magát a FutureTask osztályt úgy tervezték, hogy egy munkaszálban indítsák el, például az új Thread(task).start()-on vagy a ThreadPoolExecutoron keresztül. Az aszinkron műveletek eredményei a get(...) metóduson keresztül kerülnek lekérésre.

Delayed- olyan aszinkron feladatokhoz használják, amelyeknek a jövőben el kell indulniuk, valamint a DelayQueue-ban. Lehetővé teszi az aszinkron művelet megkezdése előtti idő beállítását.

ScheduledFuture<V>- egy marker interfész, amely egyesíti a Future és Delayed interfészt.

RunnableScheduledFuture<V>- egy interfész, amely egyesíti a RunnableFuture-t és a ScheduledFuture-t. Ezenkívül megadhatja, hogy a feladat egyszeri-e, vagy meghatározott gyakorisággal kell-e futtatni.