十一、AQS之CountDownLatch

本文介绍了Java中的CountDownLatch类,它用于让一个线程等待其他线程完成特定任务后继续执行。通过计数机制,确保在所有线程结束前,等待线程保持挂起状态。
摘要由CSDN通过智能技术生成

等待指定线程执行完毕之后才开始执行,有点类似于join方法

这个类使一个线程等待其他线程都执行完毕之后再执行。使通过一个计数器来实现的,计数器的初始值是线程的数量,每当一个线程执行完毕之后,调用countDown方法,计算器值减1,当计数器的值为0时,表示所有线程都执行完毕了,等待的线程就可以恢复工作了。

(一)常用API

1.1 构造器

count参数为要等待的线程总数

1.2 常用方法

// 调用 await() 方法的线程会被挂起,它会等待直到 count 值为 0 才继续执行
public void await() throws InterruptedException { };  
// 和 await() 类似,若等待 timeout 时长后,count 值还是没有变为 0,不再等待,继续执行
public boolean await(long timeout, TimeUnit unit) throws InterruptedException { };  
// 会将 count 减 1,直至为 0
public void countDown() { }; 

案例:有三个线程A,B,C 其中A和B线程分别执行拍照和打卡任务,C线程执行数据上传任务,需要等待A和B执行完成之后才能执行。

public class Test {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(2);
        Thread a = new Thread(() -> {
            try {
                Thread.sleep(2000);
                System.out.println("拍照任务完成");
                countDownLatch.countDown();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        Thread b = new Thread(() -> {
            try {
                Thread.sleep(2000);
                System.out.println("打卡任务完成");
                countDownLatch.countDown();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        Thread c = new Thread(() -> {
            try {
                countDownLatch.await();
                System.out.println("数据上传任务完成");
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        a.start();
        b.start();
        c.start();
    }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值