Heim  >  Artikel  >  Java  >  Wie werden Java ExecutorService-Executoren ordnungsgemäß heruntergefahren?

Wie werden Java ExecutorService-Executoren ordnungsgemäß heruntergefahren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-24 07:27:30692Durchsuche

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 dieser Anleitung 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 die Übermittlung neuer Aufgaben, während bestehende Aufgaben abgeschlossen werden können.
  • shutdownNow(): Versuche um alle ausgeführten und wartenden Aufgaben zu stoppen und eine Liste der nicht verarbeiteten Aufgaben zurückzugeben.

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

Empfohlenes Verfahren zum Herunterfahren

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

<code class="java">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();
    }
}</code>

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

<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>

durch

<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>

ersetzen, um weiterhin auf den Abschluss der Aufgabe zu warten.

Zusammenfassung des Herunterfahrens Methoden

  • shutdown(): Nimmt keine neuen Aufgaben mehr an, lässt aber zu, dass vorhandene Aufgaben abgeschlossen werden.
  • shutdownNow(): Hält alle ausgeführten und wartenden Aufgaben an und gibt unverarbeitete Aufgaben zurück.
  • awaitTermination(long timeout, TimeUnit unit): Blockiert, bis alle Aufgaben abgeschlossen sind, das Timeout auftritt oder der aktuelle Thread unterbrochen wird.

Das obige ist der detaillierte Inhalt vonWie werden Java ExecutorService-Executoren ordnungsgemäß heruntergefahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn