利用java异步编程的操作,将分解的sql异步执行并最终汇总数据。这里用到了CountDownLatch和ExecutorService,
// 初始化合并集合
List<OrderInfoVo> list= Collections.synchronizedList(new ArrayList<>());
// 开启的线程数
int length = 2;
// 初始化线程池
ExecutorService pool = Executors.newFixedThreadPool(length);
// 初始化计数器
CountDownLatch latch = new CountDownLatch(length);
//创建任务并启动多线程并发执行
for (int i = 0; i < runSize; i++) {
pool.submit(new Runnable() {
@Override
public void run() {
try {
// mybatis查询sql
// 将结果汇总
list.addAll(查询结果);
} catch (Exception e) {
logger.error("失败", e);
} finally {
//线程结束-1
latch.countDown();
}
}
});
}
try {
// 等待所有查询结束
//暂停当前线程,死循环 判断线程数是否结束
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// list为汇总集合
// 如果有必要,可以组装下你想要的业务数据,计算什么的,如果没有就没了