Maison  >  Article  >  Java  >  Explication détaillée de la classe de synchronisation multithread CountDownLatch

Explication détaillée de la classe de synchronisation multithread CountDownLatch

Y2J
Y2Joriginal
2017-05-11 09:34:031809parcourir

Cet article présente principalement les connaissances pertinentes de la classe de synchronisation multithread CountDownLatch en Java, qui a une bonne valeur de référence. Jetons-y un coup d'œil avec l'éditeur ci-dessous

Dans le développement multi-thread, nous rencontrons souvent des opérations que nous souhaitons effectuer une fois qu'un groupe de threads est terminé. Java fournit une classe auxiliaire de synchronisation multi-thread qui peut. effectuer ce type d'opération. Exigences : Méthodes courantes dans la classe

 :

Parmi elles, la méthode constructeur :

CountDownLatch(int count) Le paramètre count est un compteur, généralement attribué au nombre de threads à exécuter.

long getCount() : récupère la valeur actuelle du compteur.

void countDown() : Lorsque la valeur du compteur est supérieure à zéro, la méthode est appelée et la valeur du compteur est réduite de 1. Lorsque le compteur atteint zéro, tous les threads sont libérés.

void wait() : Appelez cette méthode pour bloquer le thread principal actuel jusqu'à ce que le compteur tombe à zéro.

Exemple de code :

Classe de thread :

import java.util.concurrent.CountDownLatch;
public class TestThread extends Thread{
CountDownLatch cd;
String threadName;
public TestThread(CountDownLatch cd,String threadName){
 this.cd=cd;
 this.threadName=threadName;

}
@Override
public void run() {
 System.out.println(threadName+" start working...");
 dowork();
 System.out.println(threadName+" end working and exit...");
 cd.countDown();//告诉同步类完成一个线程操作完成

}
private void dowork(){
 try {
 Thread.sleep(2000);
 System.out.println(threadName+" is working...");
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }

}

}

Classe de test :

import java.util.concurrent.CountDownLatch;
public class TsetCountDownLatch {

 public static void main(String[] args) {
 try {
  CountDownLatch cd = new CountDownLatch(3);// 表示一共有三个线程
  TestThread thread1 = new TestThread(cd, "thread1");
  TestThread thread2 = new TestThread(cd, "thread2");
  TestThread thread3 = new TestThread(cd, "thread3");
  thread1.start();
  thread2.start();
  thread3.start();
  cd.await();//等待所有线程完成
  System.out.println("All Thread finishd");
 } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
}

Résultats de sortie :

 thread1 start working...
 thread2 start working...
 thread3 start working...
 thread2 is working...
 thread2 end working and exit...
 thread1 is working...
 thread3 is working...
 thread3 end working and exit...
 thread1 end working and exit...
 All Thread finishd

[Recommandations associées]

1 Tutoriel vidéo gratuit Java

2 Vidéo Java de la Geek Academy. tutoriel

3. Manuel de développement Java Alibaba

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn