惯例,讲下理论先。
1、CountDownLatch : 类位于 JAVA .util.concurrent包下,管理多任务都执行完毕后再进行其他操作。初始化该类时设置任务数,某个任务执行完毕调用countDown()方法:如果当前任务数大于零,则其递减减一,释放等待 线程 ;如果递减后为零,则所有等待线程都重新启用;如果当前任务数等于0,则什么也不会发生。而它如何让多任务相互等待了?调用await()方法:如果当前任务数大于零,则当前线程处于挂起状态,与countDown()方法相呼应。也可以在await()方法设置超时时间,等一段时间后其他任务还没跑完,则直接进行下一步操作。
2、 实践:读取EXCEL比较
a、准备一份五百多条数据的EXCEL文件。
b、普通读取与CountDownLatch多任务读取速度比较
为何会有这种效果, 请看代码:
CountDownLatch方法: 多线程 分批读取,每批读取100行,
普通方法:
c、余下代码
3、 扩展
上面的看明白了 再理解 CyclicBarrier 、 Semaphore 挺简单的,记得自己动手实践。