Heim  >  Artikel  >  Java  >  Wie kann das ordnungsgemäße Herunterfahren von Java ExecutorServiceExecutors sichergestellt werden?

Wie kann das ordnungsgemäße Herunterfahren von Java ExecutorServiceExecutors sichergestellt werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-24 07:32:30665Durchsuche

How to Ensure Proper Shutdown of Java ExecutorServiceExecutors?

Sicherstellung des ordnungsgemäßen Herunterfahrens von Java ExecutorService

Executors in Java bieten eine bequeme Möglichkeit, asynchrone Aufgaben zu verwalten. Das Herunterfahren eines Executors kann jedoch eine Herausforderung darstellen, insbesondere wenn es um lang laufende oder nicht reagierende Aufgaben geht.

Problem:

Beachten Sie den Codeausschnitt:

<code class="java">ExecutorService exec = Executors.newSingleThreadExecutor();
// ... create and submit tasks
exec.shutdownNow();</code>

Nachdem alle Aufgaben abgeschlossen sind, bleibt exec.isTerminated() falsch, was darauf hinweist, dass einige Aufgaben möglicherweise nicht ordnungsgemäß beendet wurden.

Lösung:

Oracle wird empfohlen Ansatz ist die Methode „shutdownAndAwaitTermination“:

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

Zusammenfassung der Methoden zum Herunterfahren:

  • shutdown(): Deaktiviert die Übermittlung neuer Aufgaben, aber Ermöglicht die Ausführung aktueller Aufgaben.
  • shutdownNow(): Versucht, alle ausgeführten und wartenden Aufgaben zwangsweise zu beenden.
  • awaitTermination(long timeout, TimeUnit-Einheit) löst aus InterruptedException: Blockiert, bis alle Aufgaben abgeschlossen sind, eine Zeitüberschreitung eintritt oder der Thread unterbrochen wird.

Durch die Verwendung der entsprechenden Methoden zum Herunterfahren können Sie sicherstellen, dass Ihr ExecutorService ordnungsgemäß beendet wird, Ressourcen freigegeben und sichergestellt werden ein sauberer Shutdown.

Das obige ist der detaillierte Inhalt vonWie kann das ordnungsgemäße Herunterfahren von Java ExecutorServiceExecutors sichergestellt werden?. 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