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 :
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
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