Vorwort:
Der Test in der vergangenen Woche brachte einen Fehler in das von den Entwicklungskollegen entwickelte Modul an, und es war immer noch ein Zufall.
Nachdem ich den Code sorgfältig überprüft hatte, stellte ich fest, dass Multi-Threading im Geschäft aktiviert ist und 2 Threads gleichzeitig ausgeführt werden. Die neu gestarteten zwei Threads müssen jedoch sicherstellen, dass einer abgeschlossen ist und der andere weiterhin ausgeführt wird, um den Fehler zu beseitigen.
Wann soll es verwendet werden?
Multithreading wird an vielen Stellen verwendet. Wenn wir jedoch einen weiteren Thread starten möchten, nachdem ein bestimmter Thread abgeschlossen ist, kann Countdownlatch nützlich sein.
Wie benutze ich es?
Schauen wir uns einen ordentlichen Multithread -Code an:
Paketcode; öffentliche Klasse MyThread erweitert Thread {public static void main (String [] args) {MyThread th = new MyThread (); Thread t1 = neuer Thread (th, "myThread"); t1.start (); System.out.println (Thread.currentThread (). GetName ()); } public void run () {myThread1 th2 = new mythread1 (); Thread T2 = neuer Thread (Th2, "myThread1"); t2.Start (); System.out.println (this.currentThread (). GetName ()); } class myThread1 erweitert Thread {public void run () {try {thread.sleep (1000); } catch (InterruptedException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } System.out.println (this.currentThread (). GetName ()); }}}Der Code ist wie oben. Verwenden Sie zuerst MyThread, um die Thread -Klasse zu erben, und schreiben Sie dann eine andere MyThread1 -Klasse in der MyThread -Klasse, die auch die Thread -Klasse erbt, und lässt sie 1 Sekunde in der Run -Methode schlafen. Auf diese Weise wird der Code gedruckt:
Aus der obigen Ausgangsreihenfolge können wir sehen, dass der Hauptfaden zuerst gestartet wird und der MyThread -Thread gestartet wird. Im MyThread -Thread wird der MyThread1 -Thread gestartet. Da MyThread1 -Thread jedoch 1 Sekunde geschlafen hat, simulierte er die Verarbeitung nachfolgender Geschäfte, so dass es etwas später sein würde, als MyThread abgeschlossen war.
Fügen Sie nun Countdownlatch zum Code hinzu und lassen Sie MyThread1 zuerst laufen und lassen Sie MyThead weiter laufen.
Paketcode; importieren java.util.concurrent public static void main (String [] args) {MyThread th = new MyThread (); Thread t1 = neuer Thread (th, "myThread"); t1.start (); System.out.println (Thread.currentThread (). GetName ()); } public void run () {myThread1 th2 = new mythread1 (); Thread T2 = neuer Thread (Th2, "myThread1"); t2.Start (); try {countdownlatch.await (); } catch (interruptedException e) {e.printstacktrace (); } System.out.println (this.currentThread (). GetName ()); } class myThread1 erweitert Thread {public void run () {try {thread.sleep (1000); } catch (interruptedException e) {e.printstacktrace (); } System.out.println (this.currentThread (). GetName ()); Countdownlatch.Countdown (); }}}Die Code -Schreibmethode ist oben angezeigt, grob in drei Schritte unterteilt
1. Lassen Sie uns den ersten neuen CountdownLatch -Objektparameter auf 1 festlegen (ich persönlich verstehe, dass dies wie Neuarray ist. Wenn das Array gelöscht wird, kann der unterbrochene Thread weiter ausgeführt werden).
2. Rufen Sie Countdownlatch.await () in der MyThread -Klasse an; Um den aktuellen Thread zu verhindern.
3. Rufen Sie die Methode countdownlatch.countdown () in der MyThread1 -Klasse an. Wenn alle MyThead1 ausgeführt werden und die Methode schließlich aufgerufen wird, besteht die Funktion darin, das von mir erwähnte "Array" zu löschen.
Schauen Sie sich die Druckergebnisse der Ausgabe an
Die Ergebnisse sind wie in der obigen Abbildung gezeigt, die mit den erwarteten Ergebnissen übereinstimmen.
Lassen Sie uns schließlich über Countdownlatch Countdownlatch = New Countdownlatch (1) sprechen. Stellen Sie 1 in diesem Bereich fest, sodass Sie Countdownlatch.Countdown () einmal anrufen müssen, um 1 zu subtrahieren.
Wenn es sich um eine andere Zahl handelt, muss die entsprechende Anzahl von Male aufgerufen werden, andernfalls wird der Thread COUNTDOWNLATCH.AWAIT () nicht ausgeführt.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.