CountDownLatch的使用及原理

学习地址:狂神Bilibili个人主页

1.什么是CountDownLatch?在这里插入图片描述

一般被称作"计数器",作用大致就是数量达到了某个点之后计数结束,才能继续往下走。可以用作流程控制之类的作用,大流程分成多个子流程,然后大流程在子流程全部结束之前不动(子流程最好是相互独立的,除非能很好的控制两个流程的关联关系),子流程全部结束后大流程开始操作。

2.使用场景

一位教室管理员需要等学生走完了才能锁门,否则就会把学生关在里面

3.代码示例

import java.util.concurrent.CountDownLatch;

// 计数器
public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        // 总数是6,必须要执行任务的时候,再使用!
        CountDownLatch countDownLatch = new CountDownLatch(6);

        for (int i = 1; i <=6 ; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+" Go out");
                countDownLatch.countDown(); // 数量-1
            },String.valueOf(i)).start();
        }

        countDownLatch.await(); // 等待计数器归零,然后再向下执行

        System.out.println("Close Door");

    }
}

在这里插入图片描述

4.原理
  • countDownLatch.countDown():数量-1
  • countDownLatch.await():等待计数器归零,然后再向下执行
  • 每次有线程调用countDown()数量-1,假设计数器变为0,countDownLatch.await()就会被唤醒,继续执行
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`CountDownLatch` 是 Java 中的一个并发工具类,它允许一个或多个线程等待其他线程完成特定操作后再继续执行。在这个例子中,`final CountDownLatch countDownLatch = new CountDownLatch(EXECUTE_COUNT);` 的作用是在多线程环境下控制同步。 `EXECUTE_COUNT` 是一个常量,表示有多个任务(线程)需要执行。创建 `CountDownLatch` 时,它的初始计数为 `EXECUTE_COUNT`。每个线程在执行完自己的任务后会调用 `countDownLatch.countDown()` 方法,这会使计数器减一。当计数器降为零时,所有之前调用 `await()` 方法等待的线程会被唤醒并继续执行。 下面是一个简单的示例: ```java // 假设我们有五条任务要执行 final CountDownLatch executeLatch = new CountDownLatch(5); // 创建五个线程来执行任务 ExecutorService executor = Executors.newFixedThreadPool(5); for (int i = 0; i < 5; i++) { Runnable worker = () -> { try { // 模拟任务执行 Thread.sleep(1000); System.out.println("Task " + i + " executed"); } catch (InterruptedException e) { e.printStackTrace(); } // 当任务完成后,调用 countDownLatch.countDown() executeLatch.countDown(); }; executor.execute(worker); } // 主线程等待所有任务完成 executeLatch.await(); // 等待直到所有线程执行完毕 executor.shutdown(); ``` 在上面的示例中,主线程通过 `await()` 调用来阻塞,直到所有子线程的任务执行完毕(即 `COUNTDownLatch` 计数器为零)。这样可以保证任务按照预期的顺序完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值