想直接使用,知道是干什么可以看下面这个。
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,写一个简单的例子,后续更新。