CountDownLatch作为一个辅助工具类,它允许一个或多个线程等待一系列指定操作的完成。CountDownLatch以一个给定值进行初始化,通过CountDownLatch cdl = new CountDownLatch(
n); 通过cdl.await()方法进行阻塞,并等待计数器的值被减到0,其他线程每调用一次cdl.countDown方法,该计数器的值就会-1,等待计数器的初始值n减到0时,之前阻塞线程就会被自动唤醒,继续执行。
具体事例代码如下:
package com.zn.senior.queue;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) {
CountDownLatch cdl = new CountDownLatch(3);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("等待CountDownLatch计数器值减到0");
try {
cdl.await(); //等待CountDownLatch计数器值减到0
System.out.println("线程被唤醒"); //当CountDownLatch计数器为0时,该线程会被唤醒,继续向下执行。
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while(cdl.getCount()>0){
cdl.countDown();
System.out.println("CountDownLatch计数器值-1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
}