作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
Latch:闭锁。
有人把Latch比喻成是一个门,在门打开之前,所有想进门的线程都被阻塞,在门打开之后,所有想进门的线程全部通过,且门打开之后就不能再关闭。
CountDownLatch是一个同步辅助类,允许一个或多个线程等待直到其它线程的一些操作已经准备完成。
CountDownLatch是JDK 5+里面闭锁的一个实现,允许一个或者多个线程等待某个事件的发生。CountDownLatch有一个正数计数器,countDown方法对计数器做减操作,await方法等待计数器达到0。所有await的线程都会阻塞直到计数器为0或者等待线程中断或者超时。
即CountDownLatch里面有一个计数器,当计数器不为零时所有线程一直阻塞。当计数器为零时,则所有等待此门的线程就全部唤醒开始工作。
下面这个例子就很好的介绍了CountDownLatch的含义和用法。
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
private static final int NUM = 10;
private static CountDownLatch doneSignal = new CountDownLatch(NUM);
private static CountDownLatch startSignal = new CountDownLatch(1);
public static void main(String[] args) {
for(int i=0;i<NUM;i++){
new Thread(){
@Override
public void run() {
try {
//System.out.