线程池(ExecutorService)初体验
背景:查询月统计数据,因为查询日统计数据功能已经实现。月统计数据,只是参一个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)初体验的更多相关文章
- PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束
PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束 ExecutorService并没有提供什么 isDone()或者isComplete()之类的方法. 作者Atti ...
- [Java线程] Java线程池ExecutorService
示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...
- 【Java线程】Java线程池ExecutorService
示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...
- Java线程池ExecutorService和CountDownLatch的小例子
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java ...
- 多线程 线程池 ExecutorService
package org.zln.thread; import java.util.Date; import java.util.concurrent.ExecutorService; import j ...
- Java中的线程池ExecutorService
示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...
- (转)线程池 ExecutorService 详细介绍以及注意点区别
线程池 ExecutorService 相信java开发都用到,这里做个简单笔记 一 Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池 ...
- 线程池ExecutorService的使用及其正确关闭方法
创建一个容量为5的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); 向线程池提交15个任务,其实就是通过线程 ...
- 线程池ExecutorService
说到java开发,免不了跟多线程打交道.Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动.执行和关闭, ...
随机推荐
- Android_ExpandableListView
实现效果: 类似于QQ联系人列表 相关属性: android:childDivider:指定各组内子类表项之间的分隔条,图片不会完全显示, 分离子列表项的是一条直线 android:childIndi ...
- mybatis插入嵌套对象
今晚做项目遇上了一个需求,需要插入嵌套对象. 对象结构是这样的: public class RegisterMsg{ private Header header; private short pro ...
- JS获取样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- cf 手机短信问题
题目链接:https://vjudge.net/contest/331120#problem/C 题目:你有一部手机,最多显示k个人发的信息,现在收到n条信息,有可能人是相同的人发的.最新的要顶置,当 ...
- GNU Screen使用
基本使用 SSH时可以方便地resume工作 # open new screen session screen # restore screen -r Steps Using GNU Screen ...
- Pytest学习9-常用插件
pytest-django:为django应用程序编写测试. pytest-twisted:为twisted应用程序编写测试,启动反应堆并处理测试函数的延迟. pytest-cov:覆盖率报告,与分布 ...
- 转载:openmax基本概念
https://yellowmax.blog.csdn.net/article/details/78080168 https://yellowmax.blog.csdn.net/article/det ...
- FOJ-2013 A Short Problem (前缀和)
Problem Description The description of this problem is very short. Now give you a string(length N), ...
- jdbc url的若干参数
参数名称 参数说明 缺省值 最低版本要求 user 数据库用户名,用于连接数据库 无 所有版本 password 用户密码(用于连接数据库) 无 所有版本 useUnicode 是否使用Unicode ...
- HTML /和./的区别 - Web开发
"/"访问根目录 例1 https://www.cnblogs.com/test 里有 <a href="/Edsuns"></a> 则 ...