1. CountDownLatch是什么?
CountDownLatch是一个java.util.concurrent包下的一个类。用来在多线程开发的时候,让线程之前相互配合的一个类。 它可以让一个线程等待其他的线程运行结束后在执行。
它的工作方式就是一个计数器,在初始化的时候给一个数,每执行完一个线程就让这个数减一,直到为0 的时候 ,让等待的那个线程运行。
2. CountDownLatch如何工作?
他常用的方法两个,await() 和 countDown() 还有构造器 CountDownLatch latch = new CountDownLatch(5);
这个5就代表着执行5次 countDown() 方法, 被await()方法阻塞的线程就会放行。
当主线程调用子线程的时候, 就要立即执行await() 方法,来阻塞主线程,在子线程中的方法使用countDown()方法,就会让5减1。 直到减为5的时候,await()方法就会放行。主线程就可以执行下面的代码了。
3. 应用场景
实现最大的并行性:有时我们想同时启动多个线程,实现最大程度的并行性。例如,我们想测试一个单例类。如果我们创建一个初始计数为1的CountDownLatch,并让所有线程都在这个锁上等待,那么我们可以很轻松地完成测试。我们只需调用 一次countDown()方法就可以让所有的等待线程同时恢复执行
开始执行前等待其他程序加载。例如应用程序启动类要确保在处理用户请求前,所有N个外部系统已经启动和运行了。
死锁检查: 一个非常方便的使用场景是,你可以使用n个线程访问共享资源,在每次测试阶段的线程数目是不同的,并尝试产生死锁。(不知道如何使用)
欢迎加qq群交流
659772197