Testamentsvollstrecker

Executor ist die Basisschnittstelle für Klassen, die den Start ausführbarer Aufgaben implementiert. Dies bietet Hilfe beim Hinzufügen einer Aufgabe und beim Starten.

ExecutorService ist eine Schnittstelle, die die Eigenschaften von Executor erweitert und einen Dienst zum Ausführen ausführbarer oder aufrufbarer Aufgaben beschreibt. Die Submit-Methoden akzeptieren eine Aufgabe in Form eines Callable oder Runnable als Eingabe und verwenden einen Future als Rückgabewert, über den Sie das Ergebnis erhalten können.

Die invokeAll- Methode ist für die Ausführung von Aufgaben verantwortlich und gibt eine Liste von Aufgaben mit ihrem Status und Abschlussergebnissen zurück.

Die invokeAny- Methode ist für die Ausführung von Aufgaben verantwortlich und gibt gegebenenfalls das Ergebnis einer erfolgreich abgeschlossenen Aufgabe zurück (d. h. ohne das Auslösen einer Ausnahme).

ScheduledExecutorService – diese Schnittstelle bietet die Möglichkeit, ausstehende Aufgaben mit einer bestimmten Verzögerung oder einem bestimmten Zeitraum auszuführen.

AbstractExecutorService ist eine abstrakte Klasse zum Erstellen eines ExecutorService 'a. Darin befindet sich eine Implementierung der Methoden „submit“ , „invokeAll “ und „ invokeAny “ . Diese Klasse erbt ThreadPoolExecutor , ScheduledThreadPoolExecutor und ForkJoinPool .

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

Executors ist eine Factory-Klasse zum Erstellen von ThreadPoolExecutor und ScheduledThreadPoolExecutor . Wenn Sie einen dieser Pools erstellen müssen, ist diese Fabrik genau das Richtige für Sie. Es enthält verschiedene Adapter Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable und andere. Verfügt über statische Methoden zum Erstellen verschiedener ThreadPools .

ThreadPoolExecutor – Implementiert die Schnittstellen Executor und ExecutorService und trennt die Aufgabenerstellung von der Aufgabenausführung. Wir müssen ausführbare Objekte implementieren und an den Executor senden, und ThreadPoolExecutor ist für deren Ausführung, Instanziierung und Arbeit mit Threads verantwortlich.

ScheduledThreadPoolExecutor – Zusätzlich zu den ThreadPoolExecutor- Methoden erstellt es einen Pool von Threads, der die Ausführung von Befehlen nach einer bestimmten Verzögerung oder zur periodischen Ausführung planen kann.

ThreadFactoryist ein Objekt, das bei Bedarf neue Threads erstellt. Wir müssen eine Instanz an die Methode Executors.newSingleThreadExecutor(ThreadFactory threadFactory) übergeben .

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 – ermöglicht Ihnen die Definition eines Handlers für Aufgaben, die aus irgendeinem Grund nicht über ThreadPoolExecutor ausgeführt werden können . Dies geschieht, wenn keine freien Streams vorhanden sind oder der Dienst heruntergefahren oder heruntergefahren wird.

In der ThreadPoolExecutor- Klasse finden sich mehrere Standardimplementierungen :

  • CallerRunsPolicy – ​​führt eine Aufgabe im aufrufenden Thread aus;
  • AbortPolicy – ​​löst eine Ausnahme aus;
  • DiscardPolicy – ​​ignoriert die Aufgabe;
  • DiscardOldestPolicy – ​​Entfernt die älteste nicht gestartete Aufgabe aus der Warteschlange und versucht dann erneut, eine neue Aufgabe hinzuzufügen.

Abschlussservice

CompletionService ist eine Serviceschnittstelle mit Entkopplung des Startens asynchroner Aufgaben und des Erhaltens von Ergebnissen. Um Aufgaben hinzuzufügen, gibt es eine Submit-Methode, und um die Ergebnisse bereits abgeschlossener Aufgaben zu erhalten, werden eine blockierendeTake-und eine nicht blockierendePoll-.

ExecutorCompletionService ist ein Wrapper für jede Klasse, die die Executor- Schnittstelle implementiert , z. B. ThreadPoolExecutor oder ForkJoinPool . Es wird verwendet, wenn es notwendig ist, von der Methode zum Starten von Aufgaben und der Steuerung ihrer Ausführung zu abstrahieren.

Wenn es erledigte Aufgaben gibt, ziehen wir sie heraus. Wenn es keine Aufgaben gibt, warten wir, bis etwas erledigt ist. Der Dienst verwendet im Kern eine LinkedBlockingQueue, Sie können jedoch jede beliebige BlockingQueue-Implementierung übergeben.