多线程之异步查询汇总数据

2020-01-20 16:03:53来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

多线程之异步查询汇总数据

利用java异步编程的操作,将分解的sql异步执行并最终汇总数据。这里用到了CountDownLatch和ExecutorService,
// 获取时间段所有天数
List<String> days = MyDateUtils.getDays(requestParams.getStartTime(), requestParams.getEndTime());
// 天数长度
int length = days.size();
// 初始化合并集合,并指定大小,防止数组越界
List<你想要的数据类型> list = Lists.newArrayListWithCapacity(length);
// 初始化线程池
ExecutorService pool = Executors.newFixedThreadPool(length);
// 初始化计数器
CountDownLatch latch = new CountDownLatch(length);
// 查询每天的时间并合并
for (String day : days) {
Map<String, Object> param = Maps.newHashMap();
// param 组装查询条件

pool.submit(new Runnable() {
@Override
public void run() {
try {
// mybatis查询sql
// 将结果汇总
list.addAll(查询结果);
} catch (Exception e) {
logger.error("getTime异常", e);
} finally {
//线程结束-1
latch.countDown();
}
}
});
}


try {
// 等待所有查询结束
//暂停当前线程,死循环 判断线程数是否结束
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}

// list为汇总集合
// 如果有必要,可以组装下你想要的业务数据,计算什么的,如果没有就没了


原文链接:https://www.cnblogs.com/snake23/p/12217729.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:springboot~工作流activiti的搭建

下一篇:JAVA 中集合ConcurrentMap