Warten auf Thread-Ausgabe in Java
Bei der Entwicklung von Java-Anwendungen werden oft mehrere Threads gleichzeitig ausgeführt, was Koordinationsmechanismen erfordert, um einen ordnungsgemäßen Fluss und eine ordnungsgemäße Datensynchronisierung sicherzustellen . Dieser Artikel befasst sich mit einem bestimmten Szenario, bei dem ein Thread auf die Ausgabe eines anderen Threads warten muss.
In diesem Fall verwendet die Anwendung zwei Threads: einen Anwendungslogik-Thread und einen Datenbankzugriffs-Thread. Während beide Threads während der gesamten Lebensdauer der Anwendung bestehen bleiben und gleichzeitig arbeiten müssen, muss der Anwendungslogik-Thread zunächst warten, bis der Datenbankzugriffs-Thread bereit ist.
Mögliche Lösungen
Die Frage stellt die Suche nach einer geeigneten Lösung vor Herausforderungen. Die Verwendung von Thread.join() ist keine Option, da der Datenbank-Thread nur beim Herunterfahren der Anwendung beendet wird. Darüber hinaus führt das Erstellen einer leeren Schleife zum Abfragen der Datenbankbereitschaft zu unnötigem CPU-Verbrauch.
CountDownLatch-Ansatz
Eine empfohlene Lösung nutzt die CountDownLatch-Klasse, die einen Zählermechanismus verwendet . Der Zähler wird auf 1 initialisiert, was einen zum Abschluss erforderlichen Vorgang darstellt.
App-Thread-Ausführung
Im Anwendungslogik-Thread enthält der Code Folgendes:
CountDownLatch latch = new CountDownLatch(1); latch.await();
Die Methode „latch.await()“ blockiert die weitere Ausführung, bis der Latch-Zähler 0 erreicht und damit den Abschluss der Datenbank signalisiert Initialisierung.
Datenbank-Thread-Ausführung
Sobald der Datenbank-Thread die Initialisierung abgeschlossen hat, führt er Folgendes aus:
latch.countDown();
Durch Dekrementieren des Latch-Zählers wird der App-Thread freigegeben vom Warten.
Dieser Ansatz synchronisiert effektiv die beiden Threads und stellt sicher, dass der Anwendungslogik-Thread erst nach der Datenbank fortgesetzt wird Thread ist fertig. Es bietet einen effizienten und nicht blockierenden Mechanismus für die Thread-Koordination und vermeidet die Nachteile blockierender Schleifen oder der Unterbrechung des Datenbank-Threads.
Das obige ist der detaillierte Inhalt vonSo synchronisieren Sie Threads in Java: Wie kann ein Anwendungslogik-Thread darauf warten, dass ein Datenbank-Thread die Initialisierung abschließt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!