Préface:
Le test la semaine dernière a soulevé un bug au module développé par les collègues de développement, et c'était toujours une coïncidence.
Après avoir soigneusement vérifié le code, j'ai constaté que le multi-threading est activé dans l'entreprise, et 2 threads s'exécutent en même temps, mais les deux threads nouvellement démarrés doivent s'assurer que l'un est terminé et l'autre continue d'exécuter pour éliminer le bogue.
Quand l'utiliser?
Le multithreading est utilisé à de nombreux endroits, mais si nous voulons démarrer un autre thread une fois un thread spécifique terminé, le compte à rebours peut être utile.
Comment l'utiliser?
Jetons un coup d'œil au code multithread ordinaire:
Code de package; classe publique Mythread étend Thread {public static void main (String [] args) {mythread th = new mythread (); Thread t1 = nouveau thread (th, "mythread"); t1.start (); System.out.println (thread.currentThread (). GetName ()); } public void run () {mythread1 th2 = new myThread1 (); Thread t2 = nouveau thread (th2, "mythread1"); t2.start (); System.out.println (this.currentThread (). GetName ()); } class MyThread1 étend Thread {public void run () {try {Thread.Sleep (1000); } Catch (InterruptedException e) {// TODO Block de catch généré automatiquement e.printStackTrace (); } System.out.println (this.currentThread (). GetName ()); }}}Le code est comme ci-dessus. Tout d'abord, utilisez MyThread pour hériter de la classe Thread, puis écrivez une autre classe MyThread1 à l'intérieur de la classe MyThread, qui hérite également de la classe Thread, et la laisse dormir pendant 1 seconde dans la méthode Run. De cette façon, le code sera imprimé:
À partir de l'ordre de sortie ci-dessus, nous pouvons voir que le thread principal est démarré, puis le thread Mythread est démarré. Dans le fil Mythread, le fil Mythread1 est démarré. Cependant, parce que le fil Mythread1 dormait pendant 1 seconde, il a simulé le traitement des activités suivantes, il serait donc un peu plus tard que Mythread a été achevé.
Maintenant, ajoutez CountdownLatch au code et laissez MyThread1 s'exécuter d'abord, puis laissez Mythread continuer à fonctionner.
Code de package; Importer java.util.concurrent.CountDownLatch; public class Mythread étend Thread {CountdownLatch CountDownLatch = new CountdownLatch (1); public static void main (String [] args) {mythread th = new mythread (); Thread t1 = nouveau thread (th, "mythread"); t1.start (); System.out.println (thread.currentThread (). GetName ()); } public void run () {mythread1 th2 = new myThread1 (); Thread t2 = nouveau thread (th2, "mythread1"); t2.start (); essayez {CountdownLatch.Await (); } catch (InterruptedException e) {e.printStackTrace (); } System.out.println (this.currentThread (). GetName ()); } class MyThread1 étend Thread {public void run () {try {Thread.Sleep (1000); } catch (InterruptedException e) {e.printStackTrace (); } System.out.println (this.currentThread (). GetName ()); CountdownLatch.CountDown (); }}}La méthode d'écriture de code est indiquée ci-dessus, à peu près divisée en trois étapes
1. Faisons d'abord le nouveau paramètre d'objet CountdownLatch réglé sur 1 (je comprends personnellement que c'est comme un nouveau tableau. Lorsque le tableau est effacé, le thread interrompu peut continuer à fonctionner)
2. Appelez CountdownLatch.Await () dans la classe Mythread; pour arrêter d'exécuter le thread actuel.
3. Appelez la méthode CountdownLatch.CountDown () dans la classe MyThread1. Lorsque tout mythread1 est exécuté et que la méthode est finalement appelée, la fonction consiste à effacer le "tableau" que j'ai mentionné.
Découvrez les résultats de l'impression de la sortie
Les résultats sont comme indiqué dans la figure ci-dessus, qui sont conformes aux résultats attendus.
Enfin, parlons de CountdownLatch CountdownLatch = Nouveau compte à rebours (1). Définissez 1 dans ce domaine, vous devez donc appeler CountdownLatch.CountDown une fois pour soustraire 1.
S'il s'agit d'un autre numéro, le nombre de fois correspondant doit être appelé, sinon le fil d'appel de thread CountdownLatch.Await () ne sera pas exécuté.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.