„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie werden Java ExecutorService-Executoren ordnungsgemäß heruntergefahren?

Wie werden Java ExecutorService-Executoren ordnungsgemäß heruntergefahren?

Veröffentlicht am 10.11.2024
Durchsuche:498

How to Properly Shut Down Java ExecutorService Executors?

Java ExecutorService ordnungsgemäß herunterfahren

Executoren sind eine bequeme Möglichkeit, Aufgaben gleichzeitig in Java-Anwendungen zu verwalten und auszuführen. Ein unsachgemäßes Herunterfahren kann jedoch zu unerwartetem Verhalten oder Leistungsproblemen führen. In diesem Handbuch wird ausführlich erklärt, wie ein ExecutorService ordnungsgemäß heruntergefahren wird, um sicherzustellen, dass alle Aufgaben beendet oder abgebrochen werden.

Grundlegendes zum Herunterfahren von ExecutorService

ExecutorService bietet zwei primäre Methoden zum Herunterfahren :

  • shutdown(): Verhindert, dass neue Aufgaben übermittelt werden, während dies zugelassen wird Vorhandene Aufgaben müssen abgeschlossen werden.
  • shutdownNow(): Versucht, alle ausgeführten und wartenden Aufgaben zu stoppen und gibt eine Liste unverarbeiteter Aufgaben zurück.

Das ist wichtig zu beachten Es ist nicht garantiert, dass beim Herunterfahren alle Aufgaben beendet werden. Aufgaben, die nicht auf Interrupts reagieren oder lange laufende Vorgänge haben, bleiben möglicherweise aktiv.

Empfohlenes Herunterfahrenverfahren

Die Oracle-Dokumentation schlägt den folgenden Ansatz für ein ordnungsgemäßes Herunterfahren vor:

void shutdownAndAwaitTermination(ExecutorService pool) {
    pool.shutdown();
    try {
        // Wait for existing tasks to terminate
        if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
            pool.shutdownNow();
            // Wait for tasks to respond to cancellation
            if (!pool.awaitTermination(60, TimeUnit.SECONDS))
                System.err.println("Pool did not terminate");
        }
    } catch (InterruptedException ie) {
        pool.shutdownNow();
        Thread.currentThread().interrupt();
    }
}

Dieser Ansatz stellt sicher, dass vorhandene Aufgaben abgeschlossen werden können, während neue Übermittlungen verhindert werden. Wenn der Herunterfahrvorgang länger dauert als erwartet, können Sie

if (!pool.awaitTermination(60, TimeUnit.SECONDS))

durch

while (!pool.awaitTermination(60, TimeUnit.SECONDS))

um weiter auf die Aufgabe zu warten Abschluss.

Zusammenfassung der Methoden zum Herunterfahren

  • shutdown(): Stoppt die Annahme neuer Aufgaben, ermöglicht aber den Abschluss vorhandener Aufgaben.
  • shutdownNow(): Stoppt alle ausgeführten und wartenden Aufgaben und kehrt unverarbeitet zurück Aufgaben.
  • awaitTermination(long timeout, TimeUnit-Einheit): Blockiert, bis alle Aufgaben abgeschlossen sind, das Timeout auftritt oder der aktuelle Thread unterbrochen wird.
Freigabeerklärung Dieser Artikel wird unter folgender Adresse reproduziert: 1729725790 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3