倒计时器CountDownLatch,可以按照字面意思理解,是一个用于多线程控制、按倒计时执行的工具类,当倒计时为0时,等待倒计时结束的线程才会执行。3,2,1,0, 发射!
CountDownLatch主要方法:
/**
* 构造方法,指定倒计时数量
*/
public CountDownLatch(int count)
/**
* 倒计时减一
*/
public void countDown()
/**
* 调用该方法的线程会一直等待,直到该倒计时器归零后,才会继续执行
*/
public void await()
使用场景:假设线程A需要在线程B,C,D执行后才允许执行,那么就可以使用CountDownLatch。指定CountDownLatch的计数为3,每当一个线程执行执行完成后,调用countDownLatch.countDown()方法,倒计时减一。当BCD都执行完成后,CountDownLatch计数为0。此时等待倒计时完成的线程A(即调用countDownLatch.await()方法的线程)才会继续执行。
示例代码如下:
import java.util.concurrent.CountDownLatch;
/**
* CountDownLatch倒计时器
* 调用countDownLatch.await()方法的线程,会一直等待,直到countDownLatch.countDown()达到指定次数后,再运行
*
* @author: DangerShi
*/
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(4);
for (int i = 0; i < 4; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "start");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "finished");
countDownLatch.countDown();
}).start();
}
countDownLatch.await();
System.out.println("countDownLatch test");
}
}
参考:《Java高并发程序设计》 葛一鸣、郭超 编著