CountDownLatch类的分析

CountDownLatch是Java并发包中的一种同步工具类,用于使一个或多个线程等待其他线程完成一组操作。它通过AbstractQueuedSynchronizer实现线程锁操作,构造函数初始化Sync并设置state值,await方法阻塞当前线程,countDown方法减少count值并唤醒等待线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CountDownLatch:实现 一个或多个线程 等待 其他一组线程的操作执行完成。

1、内部类:Sync extends AbstractQueuedSynchronizer ,
继承了AQS,并实现了tryAcquireShared,tryReleaseShared方法,同时拥有构造方法:
Sync(int count) {
            setState(count);
        }

2、属性:
private final Sync sync;
CountDownLatch构造函数,会设置该属性

3、方法:
1)public CountDownLatch(int count){
        if (count < 0) throw new IllegalArgumentException("count < 0");
        this.sync = new Sync(count);
    }
构造函数
2)public void await()
阻塞当前线程,等待 一组线程执行完成(其实就是等待count=0),当count = 0时,才能唤醒该线程,唤醒操作在countDown方法逻辑里。
3)public boolean await(long timeout, TimeUnit unit)
同await方法,只是增加了超时时间
4)public void countDown()
执行count-1,当count减到0的时候,就会循环唤醒其他阻塞等待的线程。
5)public long getCount()
获取count值,

4、实现原理:
使用了AbstractQueuedSynchronizer类来实现线程锁的操作。实现步骤:
1)构造函数初始化Sync,并将state设置为该数量。
2)当调用await时,新建share节点,入队列,并阻塞当前线程,直到被其他线程唤醒。
3)当调用countDown时,如果state被减为0了,则统一去唤醒还在排队等待唤醒的线程(即调过await方法的线程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值