Java中多线程同步类 CountDownLatch

在多线程开发中,经常遇到但愿一组线程完成以后在执行以后的操做,java提供了一个多线程同步辅助类,能够完成此类需求:
类中常见的方法:
类中定义的方法
其中构造方法:CountDownLatch(int count) 参数count是计数器,通常用要执行线程的数量来赋值。
long getCount():得到当前计数器的值。
void countDown():当计数器的值大于零时,调用方法,计数器的数值减小1,当计数器等数零时,释放全部的线程。
void await():调所该方法阻塞当前主线程,直到计数器减小为零。
代码例子:
线程类:java

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();
    }

    
}

}

测试类:多线程

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();
        }
    }

}

输出结果:ide

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
相关文章
相关标签/搜索