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.
![](https://cdn.codegym.cc/images/article/531332d5-b6f9-4da3-a528-e4ce9c7a8c91/1024.jpeg)
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.