当前位置: 首页 > news >正文

第一次使用ThreadPoolExecutor处理业务

通过对业务逻辑的分析,进行编码,先把第一条sql查出来的数据进行分组,然后分别使用不同的线程去查询数据返回,并添加到原来的数据中。

总感觉哪里写的不对,但是同事们都没用过这个,请大家指教一下,先谢谢了。

private List<Map<String,Object>> getData(List<Map<String,Object>> dataList) throws InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(4);//将dataList截断分成4组int size = dataList.size();int groupCount = size / 4;List<Map<String,Object>> dataList1 =new ArrayList<>(dataList.subList(0, groupCount));List<Map<String,Object>> dataList2 =new ArrayList<>(dataList.subList(groupCount, groupCount*2));List<Map<String,Object>> dataList3 =new ArrayList<>(dataList.subList(groupCount*3, groupCount*4));List<Map<String,Object>> dataList4 =new ArrayList<>(dataList.subList(groupCount*4, size));ThreadPoolExecutor poolExecutor = creatThread("getData", 4);threadTask(poolExecutor,dataList1,countDownLatch);threadTask(poolExecutor,dataList2,countDownLatch);threadTask(poolExecutor,dataList3,countDownLatch);threadTask(poolExecutor,dataList4,countDownLatch);while (countDownLatch.getCount() != 0){countDownLatch.await();}dataList.clear();List<Map<String,Object>> newDataList = new ArrayList<>();newDataList.addAll(dataList1);newDataList.addAll(dataList2);newDataList.addAll(dataList3);newDataList.addAll(dataList4);return newDataList;}

具体逻辑代码:

 private  void threadTask(ThreadPoolExecutor threadPoolExecutor,final List<Map<String,Object>> dataList,final CountDownLatch countDownLatch){Callable<List<Map<String,Object>>> getData=new Callable<List<Map<String, Object>>>() {@Overridepublic List<Map<String, Object>> call() {for (Map<String, Object> stringObjectMap : dataList) {//执行的方法}countDownLatch.countDown();return dataList;}};FutureTask<List<Map<String,Object>>> getDataTask = new FutureTask<>(getData);threadPoolExecutor.execute(getDataTask);}

这里还是用原生的方法,没有使用lambda,因为服务器上的Jdk不确定是7还是8,上次有同事使用了stream去处理list,结果项目跑不下去被投诉了。

请各位大神不吝赐教,小白在此谢过了。

http://www.lryc.cn/news/262609.html

相关文章:

  • Sharding-Jdbc(6):Sharding-Jdbc日志分析
  • centos安装了curl却报 -bash: curl: command not found
  • Re58:读论文 REALM: Retrieval-Augmented Language Model Pre-Training
  • java的json解析
  • Spring事务失效的几种情况
  • filter的用法与使用场景:筛选数据
  • ClickHouse(18)ClickHouse集成ODBC表引擎详细解析
  • 网络攻击(一)--安全渗透简介
  • 视频号小店资金需要多少?
  • 机器学习项目精选 第一期:超完整数据科学资料合集
  • 档案数字化管理可以提供什么服务?
  • 第一周:AI产品经理跳槽准备工作
  • 基于核心素养高中物理“深度学习”策略及其教学研究课题论证设计方案
  • 通过 Java 17、Spring Boot 3.2 构建 Web API 应用程序
  • go原生http开发简易blog(一)项目简介与搭建
  • [足式机器人]Part4 南科大高等机器人控制课 Ch09 Dynamics of Open Chains
  • 概率论复习
  • ES客户端RestHighLevelClient的使用
  • GitHub入门命令介绍
  • EasyExcel 简单导入
  • Termux搭建nodejs环境
  • 喜报丨迪捷软件入选2023年浙江省信息技术应用创新典型案例
  • C语言连接zookeeper客户端(不能完全参考官网教程)
  • python排序
  • 【Spark精讲】Spark Shuffle详解
  • 【C++初阶】八、初识模板(泛型编程、函数模板、类模板)
  • 珠海数字孪生赋能工业智能制造,助力制造业企业数字化转型
  • HarmonyOS开发实战:如何实现一个运动排名榜页面
  • 2019年第八届数学建模国际赛小美赛D题安全选举的答案是什么解题全过程文档及程序
  • vivado 创建实施约束