并发编程【CountDownLatch】

一、使用场景

CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能

比如有一个任务,它要等待其他 6 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch

来实现这种功能了。

二、代码实现

public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(6);

        for (int i = 1; i <= 6; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "离开教室");
                countDownLatch.countDown();
            }, String.valueOf(i)).start();
        }

        countDownLatch.await();
        System.out.println(Thread.currentThread().getName() + "班长关门走人");
    }
} 

运行结果:

1离开教室
2离开教室
3离开教室
4离开教室
6离开教室
5离开教室
main班长关门走人

三、大致原理分析

总共有7个线程(6个创建的线程+main线程)在抢 CPU 的执行权,但是如果 main 线程抢占到了的话,会先判断计数器的值是否为0,如果不为0就不能继续往下执行;而其它线程在执行完了之后都会修改计数器的值,将其减1,当这6个线程都执行完毕后,计数器的值就会变为0,所以调用 await(0 方法的线程(此处即main线程)就能继续往下执行。

Java新手,若有错误,欢迎指正!

posted @ 2021-03-07 22:46  跑调大叔!  阅读(46)  评论(0编辑  收藏  举报