Java多线程之CountDownLatch基础篇

一、关于CountDownLatch的举例
  • 假如我们要建造一个房子,首先我们给准备建筑材料开启一个线程,选择建筑地点开启一个线程,招聘工人开启一个线程,每个线程完成任务就进行汇报,当所有线程都汇报完成时我们就可以开工建房子了示例代码如下
public class MyCountDownLatch {
    public static void main(String[] args) {

        /*此处相当于造房子的总设计师,总共需要做几项前置准备由总设计师说了算*/
        CountDownLatch count = new CountDownLatch(3);

        new Thread(() -> {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("报告建筑材料已经准备完毕");
            /*此处相当于没个线程完成一个任务就向总设计师汇报*/
            count.countDown();
        }).start();

        new Thread(()->{
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("报告建筑工地已选择完毕");
            /*此处相当于没个线程完成一个任务就向总设计师汇报*/
            count.countDown();
        }).start();

        new Thread(()->{
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("报告工人已招聘完毕");
            /*此处相当于没个线程完成一个任务就向总设计师汇报*/
            count.countDown();
        }).start();

        try {
            /*这里相当于监工,只有当所有前置准备都完成时,流程才可以向下走,即开工建房子*/
            count.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(()->{
            System.out.println("所有前置准备已完成,现在开工建房子");
        }).start();
    }
}

上面的count.await();语句相当于阻塞了住线程和开工造房子的线程,程序执行结果如下
在这里插入图片描述

二、关于CountDownLatch的官方解释
  • CountDownLatch在jdk1.5被引入的,在java.util.concurrent包下,CountDownLatch能够使一个线程等待其他线程完成各自的工作后再执行,CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后等待的线程就可以恢复执行任务了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值