背景:查询月统计数据,因为查询日统计数据功能已经实现。月统计数据,只是参一个List(date) 参数,for循环调用日统计,然后把结果整合就OK。

问题:单线程跑  太耗时间

解决方案:使用多线程,利用 ExcutorService 创建一个线程池,使用 CountDownLatch,来做 锁机制。

CountDownLatch的锁机制,可以访问:https://www.cnblogs.com/liun1994/p/7396026.html

下面是实例代码:

/**
* 月 统计数据
*
* @return
* @Param
*/
@Override
public ResultData<List<StatResultPo>> queryStatDataList(List<String> dateList) {
ResultData<List<StatResultPo>> resultData = ResultData.built();
List<StatResultPo> list = new ArrayList<>();
/*StatResultPo statResultPo;
for (String date : dateList) {
statResultPo = processedStatData(date);
list.add(statResultPo);
}*/
//设置 线程锁
CountDownLatch cdl = new CountDownLatch(dateList.size());
//线程池
ExecutorService es1 = Executors.newFixedThreadPool(10); for (String date : dateList) {
es1.execute(new Runnable() {
@Override
public void run() {
list.add(processedStatData(date));
//每调用一次countDown()方法,在构造函数中初始化的count值就减1,当N个线程都调用了这个方法count的值等于0,
//然后主线程就能通过await方法,恢复自己的任务。
cdl.countDown();
}
});
}
try {
//恢复主线程
cdl.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
/*Collections.sort(list, new Comparator<StatResultPo>(){
@Override
public int compare(StatResultPo o1, StatResultPo o2) {
//升序
return o1.getDate().compareTo(o2.getDate());
}
});*/
Collections.sort(list, StatResultPo::compareTo);
// 最终返回
resultData.success(list);
return resultData;
}

												

线程池(ExecutorService)初体验的更多相关文章

  1. PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束

    PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束 ExecutorService并没有提供什么 isDone()或者isComplete()之类的方法. 作者Atti ...

  2. [Java线程] Java线程池ExecutorService

    示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...

  3. 【Java线程】Java线程池ExecutorService

    示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...

  4. Java线程池ExecutorService和CountDownLatch的小例子

    import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java ...

  5. 多线程 线程池 ExecutorService

    package org.zln.thread; import java.util.Date; import java.util.concurrent.ExecutorService; import j ...

  6. Java中的线程池ExecutorService

    示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...

  7. (转)线程池 ExecutorService 详细介绍以及注意点区别

    线程池 ExecutorService 相信java开发都用到,这里做个简单笔记 一 Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池 ...

  8. 线程池ExecutorService的使用及其正确关闭方法

    创建一个容量为5的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); 向线程池提交15个任务,其实就是通过线程 ...

  9. 线程池ExecutorService

    说到java开发,免不了跟多线程打交道.Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动.执行和关闭, ...

随机推荐

  1. wfuzz的使用

    用于模糊测试,测试过滤字符 转载:https://www.secpulse.com/archives/81560.html https://www.freebuf.com/sectool/173746 ...

  2. 题解【POJ1062】昂贵的聘礼

    题面 比较复杂的最短路模型转换. 我们考虑一种建图方式: 建立一个超级源点 \(S\),它向每一个节点连一条权值为那一个节点物品价值的边,表示直接购买那一个物品: 对于每一个节点,由它每一个可用的替代 ...

  3. 2级搭建类204-Oracle 12cR2 SI ASM 图形化搭建(RHEL7.6)

    红帽RHEL 7.6上搭建Oracle 12cR2 ASM单实例 我给你们说,不是自家的产品,那贼麻烦,你是不是觉得在 红帽 7.6 上搞 12c ASM 觉得应该/好像/可能/或许/貌似/大概/也许 ...

  4. python 3 可迭代对象与迭代器

    1,可迭代对象 内部含有__iter__方法的对象是可迭代对象 遵循可迭代协议 dir() 检查对象含有什么方法 dir()会返回一个列表,这个列表中含有该对象的以字符串的形式所有方法名.这样我们就可 ...

  5. python笔记06

    python笔记06 数据类型 上个笔记内容补充 补充 列表 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) v1 ...

  6. 841. 字符串哈希(hash)

    给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2l1,r1,l2,r2,请你判断[l1,r1l1,r1]和[l2,r2l2,r2]这两个区间所包含的字符串子串是否完 ...

  7. JavaScript 继承 -JavaScript高级程序设计

    oo(Object Oriented)面向对象 许多oo语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.函数没有签名,在ecmascript中无法实现接 ...

  8. 实用沙盒工具 —— VMware Workstation15安装教程

    一:简介 VMware Workstation(中文名"威睿工作站")是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发.测试 .部署新 ...

  9. pytest-pytest-html生成HTML测试报告

    pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告.兼容Python 2.7,3.6 pytest-html 1.github上源码地址[https://github.com ...

  10. 倍加福r2000激光驱动安装及使用

    第一次完成激光的驱动安装和激光数据的采集,遇到很多问题,最后一一解决,现在记录下来,方便后面給机器人安装激光使用 激光的了解 (1)激光型号:OMD30M-R2000(30M表示30m) (2)参考手 ...