0
点赞
收藏
分享

微信扫一扫

多线程——CountDownLatch详解

1. countDownLatch的作用

CountDownLatch是java.util.concurrent包下的一个类,它允许一个或多个线程等待其他的线程执行到某一操作。

CountDownLatch是通过一个计数器来实现的,计数器的初始值就是线程的数量,每当一个线程完成自己的任务后,计数器的值就会减一。当计数器值到达0后,表示所有线程都已经完成自己的任务,然后等待的线程便可以恢复执行的任务。

2. countDownLatch的API

1. 构造函数

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

count实际上就是闭锁等待的线程数量,这个值只能设置一次,不能重复设置这个计数值。

2. 阻塞方法:await

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

与CountDownLatch的第一次交互是主线程等待其他线程,主线程必须在启动其他线程后立即调用await()方法来阻塞主线程,直到其他线程完成各自的任务。

3. 计数器减一:countDown()

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

其他N个线程通过countDown方法完成调用,没调用一次该方法,构造函数中的初始的count值就会-1,当count值为0时,主线程就能通过await()方法,恢复执行自己的任务。

3. countDownLatch的使用方式

举报

相关推荐

0 条评论