Végrehajtó

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

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

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.