多线程实现大批量数据查询

2023-11-08

优化一个系统中的功能,需要通过判断进行多次的查库,查库的性能是单表,条件有索引.

public Map<String, String> getTopics(@RequestParam("classroomIds") List<String> classroomIds) {
        Map<String, String> map = new HashMap<>();
          ExecutorService exec = Executors.newCachedThreadPool();
          List<FutureTask<Map<String, String>>> taskList = new ArrayList<FutureTask<Map<String, String>>>();
          int n = classroomIds.size()/100;
          for (int i = 0 ;i <=n; i++) {
                List<String> newclassroomIds1;
                if(i==n){
                      newclassroomIds1 = classroomIds.subList(i*100,classroomIds.size());
                }else{
                      newclassroomIds1 = classroomIds.subList(i*100,(i+1)*100);
                }
                if(newclassroomIds1!=null && newclassroomIds1.size()>0){
                      // 传入Callable对象创建FutureTask对象
                      FutureTask<Map<String, String>> ft=new FutureTask<> ( new Callable<Map<String, String>>() {
                            public Map<String, String> call() throws DaoException {
                                  Map<String, String> map = new HashMap<>();
                                  for (String classroomId : newclassroomIds1) {
                                        String topic = coursewareConfigService.getConfigOfTopicByClassroomId(classroomId);
                                        map.put(classroomId, topic);
                                  }
                                  return map;
                            }});
                      taskList.add(ft);
                      exec.submit(ft);
                }
          }
          Map<String, String> totalMap = new HashMap<>();

          for (FutureTask<Map<String, String>> ft : taskList) {
                try {
                      //FutureTask的get方法会自动阻塞,直到获取计算结果为止
                      totalMap.putAll(ft.get());
                } catch (InterruptedException e) {
                      e.printStackTrace();
                } catch (ExecutionException e) {
                      e.printStackTrace();
                }
          }
          // 关闭线程池
          exec.shutdown();
          log.info("多任务计算后的总结果是:" + JSON.toJSONString(totalMap));
        return totalMap;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程实现大批量数据查询 的相关文章

随机推荐

  • sparkstreaming读取文件读取不到数据

    今天用了下sparkstreaming读取hdfs文件或本地目录文件 发现文件内容一直不会被处理 使用了下面两种方法都不行 阅读源码并开启DEBUG后发现 textFileStream后面也是调用fileStream方法 并且newFile
  • make时遇到File `Makefile' has modification time 4e+04 s in the future的解决办法

    1 原因 是虚拟机时间和电脑时间不匹配造成 2 解决办法 在VMware 菜单虚拟机 M gt 设置 S gt 选项下设置开启时间同步 然后重启虚拟机 3 若还出现 warning Clock skew detected Your buil
  • 对Unity中的欧拉角的理解

    前言 欧拉角对人来说是十分直观的 很适合人机交互中 但不适用于插值和迭代 在说到欧拉角时有两点非常重要 旋转方式和旋转顺序 旋转方式 首先要区分每次旋转是绕固定轴旋转的 还是绕旋转之后的轴旋转的 绕固定轴旋转就是旋转过程中XYZ轴不变 绕旋
  • android自定义可缩放,移动图像裁剪框

    在实际项目中 经常要制作一个简易的图像裁剪功能 即获取一张图片 并用一个遮罩层选择目标范围并截取保存的功能 如下图所示 在此分享下该自定义视图的制作过程 需求说明 整一个视图包含一个透明的遮罩层 一个透明带白色边框的矩形 要实现的功能是 点
  • 代理IP与网络安全:保障跨境电商和游戏的顺畅运行

    在今天的数字时代 跨境电商和在线游戏已经成为全球互联网经济的两个重要组成部分 然而 这两者都需要强大的网络基础设施来支持其运行 同时 网络安全问题也变得愈发突出 在这个背景下 代理IP技术以及特别是Socks5代理协议 成为了网络工程师们重
  • react-router 5 管理路由

    实现功能 全局路由统一管理 支持配置路由重定向 路由懒加载 自定义meta字段等 全局路由拦截 支持读取路由meta配置 支持拦截跳转其他路由等 依赖版本 react 17 0 2 react router dom 5 3 0 react
  • 老杜:分享Java零基础小白学习方法和Java学习路线 课程笔记

    微信 https mp weixin qq com s muWNq6A6GjpM2rHxKo6FOA 一 学习前的准备 1 一个好的学习方法 合格程序员需要具备两个能力 指法速度 左手ASDF 右手JKL 形成肌肉记忆 编程思想 编程思想的
  • 关掉\禁用win7自动配置ipv4地址的方法 默认网关自动消失的解决办法

    转载自 http blog csdn net zouqin369 article details 6913692 今天去公司设置好IP后 无论怎么样都上不了internet 再次打开本地后发现默认网关自动消失 cmd下输入ipconfig后
  • MySQL学习笔记[学习资料来源于B站黑马测试]

    目录 一 数据库的基本知识 1 数据库概念 2 常见的数据库分类 1 当前主要使用的两种类型数据库 2 关系型数据库 3 非关系型数据库 二 SQL基本知识 1 SQL介绍 2 SQL语言的分类 三 MySQL基本知识 1 MySQL介绍
  • STM32------串口

    文章目录 前言 一 串口概述 1 定义 2 开发板硬件与PC相连 3 帧格式 4 流控 二 库函数 1 很多模块默认出厂的硬件参数配置如下 2 代码初始化思路 三 重定向printf 1 概述 2 关键分析 总结 前言 STM32 串口 提
  • VUE 下拉框选择时给其他文本框赋值

    VUE 下拉框选择时给其他文本框赋值
  • Python线程,以及多线程带来的数据错乱和死锁的解决方法

    摘至本人有道云笔记 Python线程 1 python多线程的创建 在Python中 同样可以实现多线程 有两个标准模块thread和threading 不过我们主要使用更高级的threading模块 threading模块提供的类 Thr
  • 日撸 Java 三百行(51-60天,kNN 与 NB)

    目录 总述 01 10天 基本语法 11 20天 线性数据结构 21 30天 树与二叉树 31 40天 图 41 50天 查找与排序 51 60天 kNN 与 NB 61 70天 决策树与集成学习 71 80天 BP 神经网络 81 90天
  • Box2D C++教程6-定制器(Fixtures)

    Box2D C 教程6 定制器 Fixtures 时间 2012 09 01 17 10 24 CSDN博客 原文 http blog csdn net wen294299195 article details 7932770 Box2D
  • Jetbrains IntelliJ IDEA破解方法

    IntelliJ IDEA 一套智慧型的Java整合开发工具 PHPStorm PHP 集成开发工具 PyCharm 智能Python集成开发工具 RubyMine RubyMine 是一个为Ruby 和Rails开发者准备的IDE Web
  • ActivityManagerService新加listener及触发其回调

    ActivityManagerService新加listener及触发其回调 前言 Android mk ActivityManager java ActivityManagerNative java IActivityManager ja
  • 汇编语言rep movsd

    汇编语言rep movsd rep movsd 一般为 mov esi offset s1 mov edi offset s2 mov ecx 数 cld rep movsd 查找了几个资料 都说得不怎么完整 也许是我知道的太少了 所以觉得
  • 区块链学习1:Merkle树(默克尔树)和Merkle根

    前往老猿Python博文目录 一 简介 默克尔树 Merkle tree MT 又翻译为梅克尔树 是一种哈希二叉树 树的根就是Merkle根 关于Merkle树老猿推荐大家阅读 Merkle树 这篇文章 Merkle树和Merkle根在区块
  • 网络数据传输流程

    目录 一 局域网传输流程 1 集线器 2 交换机 3 交换机 路由器 二 广域网数据传输流程 主要过程 一 局域网传输流程 1 集线器 主要过程 源主机 从上到下封装 如果知道目的IP主机的MAC地址就直接封装在数据链路层的以太网帧头中 如
  • 多线程实现大批量数据查询

    优化一个系统中的功能 需要通过判断进行多次的查库 查库的性能是单表 条件有索引 public Map