一、简介
CountDownLatch提供了和join一样的功能,可以允许一个线程等待其它线程操作完成之后再进行操作。
CountDownLatch在使用的时候需要接受一个int类型的参数作为计数器,需要等待的线程调用await方法就会进入等待状态,被等待的线程每一次调用countDown方法时,计数器就会减1,直至为0的时候,等待线程就能继续执行了。
需要注意的是,计数器必须大于等于0,如果等于0的话,等待线程在调用await的时候并不会进入等待状态。
二、使用实例
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(2);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
log.info("子线程执行开始...");
countDownLatch.countDown();
log.info("子线程休眠...");
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("子线程休眠结束");
countDownLatch.countDown();
}
});
thread.start();
log.info("主线程执行完了,等待子线程...");
countDownLatch.await();
log.info("主线程等待子线程结束");
}