CountDownLatch的使用技巧
在使用了多线程处理任务后,最常见的需要就是主线程并不知道任务的完成情况,因此无法决定是继续往下进行还是继续完毕。CountDownLatch是JDK提供给我们的多线程间通信的一个工具,用于让主线程知道任务完成的进度。可以使主线程等待其他线程池内线程执行完毕后再执行。
举个例子来说:
目前一名老师接到了一个任务,说要把教室里的桌子都擦干净
流程是:
把桌子擦干净
等全部桌子干净了之后,去敲上课铃。
如果不用多线程做的话,教室里有1000张桌子,老师(主线程)要逐一把桌子擦干净,然后去敲上课铃。效率比较低,于是老师叫来了50个同学(50个线程),告诉他们要擦桌子。但是问题是老师无法检查每张桌子是否都擦了,所以不知道什么时候去敲上课铃,于是约定同学擦完一张桌子就要举手报告老师一次,老师只需要记录同学的举手次数,等到同学的举手次数到了1000次,老师去敲上课铃。而这个CountDownLatch其实就是这个计数器
一下是一个简单案例
用newFixedThreadPool创建一个固定大小1的线程池,CountDownLatch类中放了page个子线程放进线程池中执行,
cdl.await方法用于在线程池中page个线程执行完毕后通知主线程告诉其可以执行了
在定义一个线程中执行完毕后 要加上latch.countDown()方法