1)功能
CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。
2)原理:
CountDownLatch是通过一个计数器来实现的,计数器的初始值为需要等待线程的数量。
eg:CountDownLatch c = new CountDownLatch(10); // 等待线程的数量为10
主线程调用CountDownLatch的await()方法会阻塞当前线程(即:主线程在闭锁上等待),直到计数器的值为0。
当一个工作线程完成了自己的任务后,调用CountDownLatch的countDown()方法,计数器的值就会减1。
当计数器值为0时,说明所有的工作线程都执行完了,此时,在闭锁上等待的主线程就可以恢复执行任务。
3)应用场景
倒数计时器
例如:一种典型的场景就是火箭发射。在火箭发射前,为了保证万无一失,往往还要进行各项设备、仪器的检查。 只有等所有检查完毕后,引擎才能点火。这种场景就非常适合使用CountDownLatch。
它可以使得点火线程,等待所有检查线程全部完工后,再执行
4)使用方式
static final CountDownLatch end = new CountDownLatch(10);
end.countDown();
end.await();