CountDownLatch介绍
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如主任务分发给3个子任务去执行,需要等待3个子任务执行完成之后才能继续执行主任务的场景,就可以用到CountDownLatch.
CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下.
CountDownLatch机制
CountDownLatch内部是有一个计数器,计数器的初始化值大于等于需要执行的线程数,当这个计数器的线程们完成任务之后,才会触发等待的线程进行下一步操作。每个线程执行的时候需要调用countDown方法,已将计数器减一,当计数器的值为0时,即代表所有线程已经完成任务,然后在闭锁上等待的线程才可以恢复执行任务。
注:CountDownLatch是一个一次性操作,计数无法重置。 如果需要一个重置的版本计数,考虑使用CyclicBarrier。