ExecutorService wartet auf Aufgabenabschluss
In Multithread-Anwendungen muss oft gewartet werden, bis alle an einen ExecutorService übermittelten Aufgaben abgeschlossen sind bevor Sie fortfahren. Während grobe Techniken wie Abfragen oder die ständige Überprüfung eines globalen Aufgabenzählers existieren, stehen effizientere und elegantere Lösungen zur Verfügung.
awaitTermination() und Shutdown()
Der empfohlene Ansatz beinhaltet die Verwendung der Methode „awaitTermination()“ von ExecutorService. Sie können damit eine Zeitüberschreitung festlegen oder auf unbestimmte Zeit warten, bis die Threads abgeschlossen sind. So funktioniert es:
// Create an ExecutorService instance ExecutorService taskExecutor = Executors.newFixedThreadPool(4); // Submit tasks as needed while(...) { taskExecutor.execute(new MyTask()); } // Shutdown the ExecutorService to prevent new tasks from being submitted taskExecutor.shutdown(); // Wait for threads to complete try { taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { // Handle any interruptions }
Diese Methode blockiert, bis die Threads abgeschlossen sind oder das Timeout erreicht wurde. Sie können auch ein endliches Timeout angeben, wenn Sie möchten, dass die Anwendung nach einer bestimmten Zeitspanne fortgesetzt wird, auch wenn einige Aufgaben noch nicht abgeschlossen sind.
Das obige ist der detaillierte Inhalt vonWie kann man effizient auf den Abschluss der ExecutorService-Aufgabe warten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!