CountDownLatch使一个线程等待其他线程完成各自的工作后再执行。例如:应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后再执行。
CountDownLatch是通过一个计算器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1.当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。
应用场景:
1、实现最大的并行性:有时我们想同时启动多个线程,实现最大程度的并行性。例如:我们想测试一下单例类。如果我们创建一个初始计数为1的CountDownLatch,并让所有线程都在这个锁上等待,那么我们可以轻松地完成测试,我们只需调用一次countDown()方法就可以让所有的等待线程同时恢复执行。
2、开始执行前等待n个线程完成各自任务:例如应用程序启动类确保在处理用户请求前,所有N个外部系统已经启动和运行
3、死锁检测:一个非常方便的使用场景,你可以使用n个线程访问共享资源,在每次测试阶段的线程数目不同,并尝试产生死锁。