CountDownLatch源码解析

CountDownLatch countDownLatch=new CountDownLatch(20);

Sync(int count) {
    setState(count); // 首先创建时的 计数 就是等待多少个线程通过 countDown后 await的线程被
    						 // 唤醒 所以 这个state = 创建时的个数 那么 每次relase 一次就减去1
}

countDownLatch.await(); 方法

public final void acquireSharedInterruptibly(int arg)
        throws InterruptedException {
        //因为允许中断  所以 检测
    if (Thread.interrupted())
        throw new InterruptedException();
        // 判断是否=0 不等于 0 那么就返回-1 可以获取 锁
        // 所以 这个东西默认只能使用一次的。new 一次用一次
    if (tryAcquireShared(arg) < 0)
    //这个方法就是 普通的 aqs 里面的方法 首先把自己 加入clh队列
    // 然后把自己 park() 处于watting状态 等待  后续countDown 把自己唤醒 比较简单
        doAcquireSharedInterruptibly(arg);
}

countDownLatch.countDown(); 方法

public final boolean releaseShared(int arg) {
// 将state 的值 cas -1 
    if (tryReleaseShared(arg)) {
    //这个方法 我在 读写锁中 有比较详情的注释
    // 因为 countDOwnLatch 使用的是 共享方式
    // await 可以有很多个线程 所以 使用 风暴的方式 唤醒后续的 线程
    // 就是 被唤醒的线程  继续唤醒后续 Node
        doReleaseShared();
        return true;
    }
    return false;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值