CountDownLatch类源码解释

想直接使用,知道是干什么可以看下面这个。

https://blog.csdn.net/baxxdwyp/article/details/101015499

直接看代码!

1.public CountDownLatch(int count) 定义初始化,可以理解倒计时count个数,或者一个门上有count把锁,锁全部打开,门才可以打开。

public CountDownLatch(int count) {
    if (count < 0) throw new IllegalArgumentException("count < 0");
    this.sync = new Sync(count);
}

2.await() 使当前线程等待直到倒计时器为0,如果当前计数即为0,则即可返回,计数大于0,线程将被禁用,并且有两种情况发生之前休眠(一.调用countDown方法,二.被其他一些线程中断)。如果当前线程在进入此方法设置了中断状态或是等待中断线程,抛出 interruptedexception ,当前线程的中断状态被清除。

public void await() throws InterruptedException {
    sync.acquireSharedInterruptibly(1);
}

3.await(long timeout, TimeUnit unit) 自己设定时间,如果在时间内,计数器到达0,返回true,否则返回false,如果当前线程发生中断,抛出InterruptedException。

public boolean await(long timeout, TimeUnit unit)
    throws InterruptedException {
    return sync.tryAcquireSharedNanos(1, unit.toNanos(timeout));
}

4.countDown() 减少锁的计数,当前锁大于0,则减一,如果等于0,则不会发生任何事情。

public void countDown() {
    sync.releaseShared(1);
}

5.getCount() 返回当前计数,看看门上还有多少把锁,可以测试使用

public long getCount() {
    return sync.getCount();
}

有机会整合一下CountDownLatch和Semaphore,写一个简单的例子,后续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值