Wie führe ich mehrere Threads gleichzeitig in Java aus? ExecutorService-Ansatz

Veröffentlicht: 2021-10-09
Wie führe ich mehrere Threads gleichzeitig in Java aus? ExecutorService-Ansatz

Schauen wir uns dieses Beispiel noch einmal an: Wie erhalte ich den Ping-Status eines beliebigen HTTP-Endpunkts in Java?

Haben Sie die Thread-Ausführung für dieses Beispiel bemerkt? Es ist sequentiell. What if you have 500 endpoints? Ich wette, Sie müssen mindestens 5 Minuten warten, um ein Ergebnis zu erhalten. Was sicher nicht die beste Lösung ist.

Was jetzt? Die richtige Frage wäre:

  • Wie führt man mehrere Threads gleichzeitig aus?
  • Wie implementiert man mehrere Threads in Java?
  • Wie führe ich verschiedene Threads in Java aus?
  • Java – Wo ist das Multithreading-Programmier-Tutorial?
  • Thema: Wie kann man mehrere Threads verwenden, um die Verarbeitung zu beschleunigen?

ExecutorService Approach ist Ihre Antwort.

Ein Executor, der Methoden zum Verwalten der Beendigung und Methoden bereitstellt, die ein Future zum Verfolgen des Fortschritts einer oder mehrerer asynchroner Aufgaben erzeugen können.

Ein ExecutorService kann heruntergefahren werden, was dazu führt, dass er neue Aufgaben ablehnt. Es werden zwei verschiedene Methoden zum Herunterfahren eines ExecutorService bereitgestellt. Die shutdown() Methode lässt zu, dass zuvor gesendete Aufgaben ausgeführt werden, bevor sie beendet werden, während die shutdownNow() Methode verhindert, dass wartende Aufgaben gestartet werden, und versucht, aktuell ausgeführte Aufgaben zu stoppen.

Nach der Beendigung hat ein Testamentsvollstrecker keine Aufgaben, die aktiv ausgeführt werden, keine Aufgaben, die auf die Ausführung warten, und es können keine neuen Aufgaben eingereicht werden. Ein nicht verwendeter ExecutorService sollte heruntergefahren werden, um die Rückgewinnung seiner Ressourcen zu ermöglichen.

Die Methode Submit erweitert die Basismethode Executor.execute ( java.lang.Runnable ) durch Erstellen und Zurückgeben eines Futures, das verwendet werden kann, um die Ausführung abzubrechen und/oder auf den Abschluss zu warten. Die Methoden invokeAny und invokeAll führen die am häufigsten nützlichen Formen der Massenausführung aus, indem sie eine Sammlung von Aufgaben ausführen und dann darauf warten, dass mindestens eine oder alle abgeschlossen sind. (Die Klasse ExecutorCompletionService kann verwendet werden, um benutzerdefinierte Varianten dieser Methoden zu schreiben.)

Die Klasse Executors stellt Factory-Methoden für die in diesem Paket bereitgestellten Executor-Dienste bereit.

  • java – ExecutorService, wie kann man warten, bis alle Aufgaben abgeschlossen sind?
  • Eine Anleitung zum Java ExecutorService
  • Java-Thread-Pool – ExecutorService-Erklärung

Nachfolgend finden Sie ein einfaches Java-Beispiel, das die usage of ExecutorService erläutert.

Ausgabe:

Sehen Sie sich jetzt das Ergebnis an.

Es sollte in nur wenigen Sekunden sein. Ich hoffe, Sie finden das hilfreich. Versuchen Sie, dies mehr als einmal auszuführen, und Sie sehen möglicherweise ein anderes Ergebnis, da alle Threads parallel ausgeführt werden und wer jemals ein schnelles Ergebnis erhält, wird das Ergebnis in der Eclipse-Konsole angezeigt.

Lassen Sie es mich wissen, wenn Sie Fragen haben.