Heim > Java > javaLernprogramm > Wie kann man mit ExecutorService effizient auf den Abschluss einer Aufgabe warten?

Wie kann man mit ExecutorService effizient auf den Abschluss einer Aufgabe warten?

Mary-Kate Olsen
Freigeben: 2024-12-14 04:41:09
Original
336 Leute haben es durchsucht

How to Efficiently Await Task Completion Using ExecutorService?

ExecutorService: Warten auf Aufgabenabschluss

Bei der Nutzung von ExecutorService muss ein Entwickler möglicherweise die Ausführung anhalten, bis alle zugewiesenen Aufgaben abgeschlossen sind. Diese Untersuchung untersucht den einfachsten Ansatz zum Erreichen dieses Ziels.

Frage:

Führen Sie eine Vielzahl von Rechenaufgaben aus, eine pro Kern, und pausieren Sie die Ausführung, bis sie abgeschlossen sind. Die aktuelle Implementierung verwendet ExecutorService.execute() und es.wait(), ist jedoch mit einer IllegalMonitorStateException konfrontiert.

Antwort:

Verwenden Sie ExecutorService.invokeAll(), eine unkomplizierte Lösung das die gewünschte Funktionalität mit einer einzigen Zeile erreicht Code:

List<Callable<Object>> todo = new ArrayList<Callable<Object>>(singleTable.size());

for (DataTable singleTable: uniquePhrases) {
    todo.add(Executors.callable(new ComputeDTask(singleTable))); 
}

List<Future<Object>> answers = es.invokeAll(todo);
Nach dem Login kopieren

invokeAll() pausiert die Ausführung, bis alle Aufgaben abgeschlossen sind, wodurch ein manuelles Herunterfahren undawaitTermination() überflüssig werden. Dieser Ansatz ist auf wiederverwendbare ExecutorService-Instanzen über mehrere Ausführungen hinweg ausgerichtet.

Weitere Informationen zu verwandten Themen finden Sie in diesen Referenzen:

  • [SO: Warten auf Thread-Abschluss](URL)
  • [SO: Thread-Rückgabewerte](URL)
  • [SO: invokeAll() und Sammlung>](URL)
  • [SO: Überlegungen zur Synchronisierung](URL)

Das obige ist der detaillierte Inhalt vonWie kann man mit ExecutorService effizient auf den Abschluss einer Aufgabe warten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage