业务背景
这次的业务场景是公司的旧系统使用单线程同步接口,而需要同步的数据量已经逐渐扩大到几十万上百万,导致同步一次数据需要将近半天时间。
对此我想到使用多线程优化系统。
CountDownLatch
概念
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。
简单来说就是我准备线程池让程序自动分配每个线程执行的任务,虽然执行顺序是乱序的,但保证了任务唯一。
使用
我这里使用ExecutorService创建线程池,这样更高效,不多赘述。
具体实现代码如下:
//ExecutorService创建包含50个线程的线程池
ExecutorService threadPool = Executors.newFixedThreadPool(50);
//CountDownLatch规定任务总数
CountDownLatch countDownLatch=new CountDownLatch(“任务总数”);
//循环分配任务
for(int i = 1; i <= “任务总数”; i++) {
...
threadPool.execute(()->{
任务;
countDownLatch.countDown();//完成任务后“任务总数”减一
}
...
countDownLatch.await();//任务结束,等待
}