Végrehajtó
![](https://cdn.codegym.cc/images/article/83e7f607-1195-4d00-a2b8-f790515dc1a9/800.jpeg)
Az Executor az osztályok alapfelülete, amely végrehajtja a futtatható feladatok elindítását. Ez segítséget nyújt egy feladat hozzáadásához és annak elindításához.
Az ExecutorService egy olyan felület, amely kiterjeszti az Executor tulajdonságait, és leír egy szolgáltatást a futtatható vagy hívható feladatok futtatásához. A beküldési metódusok bemenetként fogadnak el egy feladatot Callable vagy Runnable formában, visszatérési értékként pedig egy Future-t használnak, amelyen keresztül megkaphatja az eredményt.
Az invokeAll metódus felelős a feladatok végrehajtásáért, a feladatok listájának visszaadásáért azok állapotával és befejezési eredményeivel.
Az invokeAny metódus felelős a feladatok végrehajtásáért, a sikeresen végrehajtott feladat eredményének visszaadásáért (vagyis kivétel nélkül), ha van ilyen.
ScheduledExecutorService – ez az interfész lehetőséget ad a függőben lévő feladatok bizonyos késleltetéssel vagy meghatározott időtartammal történő futtatására.
Az AbstractExecutorService egy absztrakt osztály egy ExecutorService létrehozására'a. Belül van a submit , invokeAll , invokeAny metódusok megvalósítása. Ez az osztály örökli a ThreadPoolExecutort , a ScheduledThreadPoolExecutort és a ForkJoinPool-t .
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
Callable<String> task = () -> {
System.out.println(Thread.currentThread().getName());
return Thread.currentThread().getName();
};
scheduledExecutorService.schedule(task, 10, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();
}
ThreadPoolExecutor
![](https://cdn.codegym.cc/images/article/2b86fe3b-e258-4219-8c32-7d3ba93670ea/800.jpeg)
Az Executors egy gyári osztály a ThreadPoolExecutor , ScheduledThreadPoolExecutor létrehozásához. Ha létre kell hoznia egy ilyen medencét, akkor ez a gyár pontosan az, amire szüksége van. Különböző Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable és más adaptereket tartalmaz. Statikus módszerekkel rendelkezik a különböző ThreadPool létrehozásához.
ThreadPoolExecutor – Megvalósítja az Executor és ExecutorService felületeket , és elválasztja a feladat létrehozását a feladat végrehajtásától. A futtatható objektumokat implementálnunk kellés el kell küldenünk a végrehajtónak,ezek végrehajtásáért, példányosításáért és a szálakkal végzett munkáért pedig a ThreadPoolExecutor felel.
ScheduledThreadPoolExecutor – A ThreadPoolExecutor metódusok mellettlétrehoz egy szálkészletet, amely ütemezheti a parancsok végrehajtását egy adott késleltetés után vagy időszakos végrehajtásra.
ThreadFactoryegy olyan objektum, amely igény szerint új szálakat hoz létre. Egy példányt kell átadnunk az Executors.newSingleThreadExecutor(ThreadFactory threadFactory) metódusnak .
ExecutorService executorService = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override public Thread newThread(Runnable r) {
Thread thread = new Thread(r, "MyThread");
thread.setPriority(Thread.MAX_PRIORITY);
return thread; }
});
RejectedExecutionHandler – lehetővé teszi kezelő meghatározását azokhoz a feladatokhoz, amelyek valamilyen okból nem hajthatók végre a ThreadPoolExecutoron keresztül . Ez akkor fordul elő, ha nincsenek ingyenes adatfolyamok, vagy a szolgáltatást leállítják vagy leállítják.
Számos szabványos megvalósítás található a ThreadPoolExecutor osztályban :
- CallerRunsPolicy – egy feladatot futtat a hívó szálon;
- AbortPolicy – kivételt dob;
- DiscardPolicy – figyelmen kívül hagyja a feladatot;
- DiscardOldestPolicy – Eltávolítja a legrégebbi el nem indított feladatot a sorból, majd újra megpróbál új feladatot hozzáadni.
Befejezési szolgáltatás
![](https://cdn.codegym.cc/images/article/52be544f-17a5-406c-9f5f-9864056f87a8/512.jpeg)
A CompletionService egy szolgáltatási interfész, amely szétválasztja az aszinkron feladatok elindítását és az eredmények elérését. Feladatok hozzáadásához van egy elküldésimódszer, a már befejezett feladatok eredményének lekéréséhez pedig egy blokkolótakeés egy nem blokkolólekérdezési.
Az ExecutorCompletionService az Executor felületet megvalósító bármely osztály , például a ThreadPoolExecutor vagy a ForkJoinPool átdolgozója. Akkor használatos, ha el kell vonni a feladatok elindításának és végrehajtásuk ellenőrzésének módszerétől.
Ha vannak kész feladatok, akkor kihúzzuk azokat. Ha nincs feladat, akkor addig várjuk a vételt, amíg valami elkészül. A szolgáltatás egy LinkedBlockingQueue-t használ a magjában, de bármely BlockingQueue implementációt átadhat.