一、简介
CountDownLatch 是 java.util.concurrent 包下的一个同步辅助类,它能使一个或多个线程在其他的线程的一系列操作完成之前一直等待,初始化值为计数器大小(即线程数量)。
二、主要方法
countDown方法,当前线程调用此方法,则计数减一。
await方法,调用此方法会一直阻塞当前线程,直到计时器的值为0。
三、实现demo
测试线程
import java.util.concurrent.CountDownLatch;
public class MyThread implements Runnable {
private final CountDownLatch startSignal;
public MyTestThread(CountDownLatch startSignal) {
super();
this.startSignal = startSignal;
}
@Override
public void run() {
try {
startSignal.await();
//一直阻塞当前线程,直到计时器的值为0
} catch (InterruptedException e) {
e.printStackTrace();
}
//实际测试操作
doWork();
}
private void doWork() {
// TODO Auto-generated method stub
System.out.println("do work");
}
}
测试主方法
public class MyTest {
public static void main(String[] args) {
// 初始化计数器为 1
CountDownLatch start=new CountDownLatch(1);
//模擬16个线程
for(int i=0;i<16;i++){
MyTestThread tt =new MyTestThread(start);
Thread t = new Thread(tt);
t.start();
}
//计数器減 1
start.countDown();
//计数器为0,所有线程释放,同时并发
}
}