基于白嫖B站黑马程序员视频:全面深入学习java并发编程,java基础进阶中级必会教程
1 场景
倒计时锁,用来线程协作,等待所有的线程完成倒计时以后再继续执行。
2 例子
public class Main {
public static void main(String[] args) throws InterruptedException {
int num = 10000;
//创建CountDownLatch对象
CountDownLatch countDownLatch = new CountDownLatch(num);
for (int i = 0; i < num; i++) {
new Thread(() -> {
System.out.println("子线程");
countDownLatch.countDown();//每次运行完子线程任务就-1
}).start();
}
countDownLatch.await();//当所有的子线程都运行完毕,就继续执行主线程
System.out.println("等待完毕,主线程执行!");
}
}
3 原理
底层原理依然是AQS,state就是count,当主线程尝试获得锁时,会判断state是不是等于0,只有当其为0的时候,主线程才能执行。