zoukankan      html  css  js  c++  java
  • 多线程之异步查询汇总数据

    利用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为汇总集合
    // 如果有必要,可以组装下你想要的业务数据,计算什么的,如果没有就没了

  • 相关阅读:
    Android AdapterView View的复用机制 分析
    go12---interface
    go11---方法method
    go10---struct
    go09---defer
    go8---函数function
    go7---map
    go6---slice切片
    go5--数组
    go4--break,continue + 标签
  • 原文地址:https://www.cnblogs.com/snake23/p/12217729.html
Copyright © 2011-2022 走看看