• CountDownLatch


    一、定义

    CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程,而学生就好比是执行的线程。

    注意:java中还有一个同步工具类叫做 CyclicBarrier,他的作用和CountDownLatch类似。同样是等待其他线程都完成了,才可以进行下一步操作,我们再举一个例子,在打王者的时候,在开局前所有人都必须要加载到100%才可以进入。否则所有玩家都相互等待。

    我们看一下区别:

    CountDownLatch: 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。 CyclicBarrier : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。关键点其实就在于那N个线程(1)CountDownLatch里面N个线程就是学生,学生做完了试卷就可以走了,不用等待其他的学生是否完成(2)CyclicBarrier 里面N个线程就是所有的游戏玩家,一个游戏玩家加载到100%还不可以,必须要等到其他的游戏玩家都加载到100%才可以开局

    现在应该理解CountDownLatch的含义了吧,下面我们使用一个代码案例来解释。

    二、使用

    我们使用学生考试的案例来进行演示:

    public class CountDownLatchTest {
        static CountDownLatch countDownLatch = new CountDownLatch(2);
        public static void main(String[] args) {
            System.out.println("全班同学开始考试:一共两个学生");
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("第一个学生交卷,countDownLatch 减1");
                    countDownLatch.countDown();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("第二个学生交卷,countDownLatch 减1");
                    countDownLatch.countDown();
                }
            }).start();
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("老师清点试卷 ,在此之前,只要有一个没有交,countDownLatch 不为0,不能离开考场");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (3)- 定时器
    一个公式让你35岁以后能越过越好!大神修炼心法
    Rust 枚举与模式匹配:探索类型安全与表达力的完美结合
    【FATE联邦学习】FATE框架的大坑,使用6个月有感
    刷完HashMap源码,我们一起进大厂
    阿里云无影云电脑详细介绍:价格、使用和功能优势说明
    java企业数据管理系统
    快速采集微信联系人昵称列表并转发多条消息
    MySQL压缩包方式安装,傻瓜式教学
    【powershell】入门和示例
  • 原文地址:https://blog.csdn.net/weixin_43064364/article/details/127672159