Java实习记录 7 ——使用 Callable 多线程优化接口开发

ops/2024/10/19 1:25:36/

Java实习记录 7 ——使用 Callable 多线程优化接口开发

  • 引言
  • 正文
  • 收获

引言

实习第四周,接触到一个新需求,要求查询用户添的系列课程历史记录,包含分页查询以及按创建时间排序。主要要求查询,课程的名称、课程适合的年龄段、包含单元数量、周计划数量、活动数量以及最后一次更新时间。展开该课程时可以查看该课程下单元的统计信息,包括单元的周计划数量、活动数量。查询使用到了4个表。

正文

该接口的 service 层实现类方法中,首先进行参数校验,获取分页参数以及登录用户信息,校验他们是否为空,不为空进行数据查询。
主要在统计课程单元数量、周数量、活动数量时使用了多线程
优化前,查询这三个统计数据主要是使用主线程依次调用对应的持久层方法到数据库中进行查询,接口响应时间较长。
优化后:

java">  					// 多线程获取统计数据,创建 Callable 类,定义 call 方法Callable<Integer> getUnitCountCall = () -> curriculumUnitDao.getUnitCountByCurriculumId(i.getId());Callable<Integer> getWeekCountCall = () -> curriculumUnitPlanDao.getPlanCountByCurriculumId(i.getId());Callable<Integer> getActivityCountCall = () -> curriculumDao.getActivitiesCountById(i.getId());// 创建 Future 类,获取线程执行结果FutureTask<Integer> getUnitCountTask = new FutureTask<>(getUnitCountCall);FutureTask<Integer> getWeekCountTask = new FutureTask<>(getWeekCountCall);FutureTask<Integer> getActivityCountTask = new FutureTask<>(getActivityCountCall);// 封装到 Tread 类,开启线程Thread getUnitCountThread = new Thread(getUnitCountTask);Thread getWeekCountThread = new Thread(getWeekCountTask);Thread getActivityCountThread = new Thread(getActivityCountTask);getUnitCountThread.start();getWeekCountThread.start();getActivityCountThread.start();try{// 获取课程单元数量curriculumsResponse.setUnitCount(getUnitCountTask.get());// 获取课程周数量curriculumsResponse.setWeekCount(getWeekCountTask.get());// 获取系列课程活动个数curriculumsResponse.setActivitiesCount(getActivityCountTask.get());}catch (Exception e){e.printStackTrace();}finally {// 关闭线程getUnitCountThread.interrupt();getWeekCountThread.interrupt();getActivityCountThread.interrupt();}

使用多线程并发到三个不同数据库中查询,最后同时获取结果,不必再等待上一个执行结束,下一个可并发执行,加快了接口响应速度

收获

在企业中实践了多线程的使用,实现不仅仅把功能完成,同时也进行了对接口的优化,积累了跟多企业开发经验


http://www.ppmy.cn/ops/90129.html

相关文章

使用Adobe Photoshop CS5给图片加水印

使用Adobe Photoshop CS5给图片加水印 前言1.我这里使用的是Adobe Photoshop CS52.新建空白画布3.写入水印内容4.按 Ctrl T 将其倾斜5.右键图层选择“混合选项”6.选择描边&#xff0c;颜色选择灰色7.效果如下8.填充选择0&#xff0c;不透明度选择75%9.打开编辑&#xff0c;选…

如何判断IP地址属于住宅IP还是机房IP

在数字化时代,IP地址作为互联网通信的基础标识&#xff0c;扮演着重要的角色。无论是网络管理、数据分析还是安全监控&#xff0c;正确识别IP地址的类型——尤其是区分是住宅IP还是机房IP&#xff0c;对于确保网络安全、优化网络性能以及合法合规运营具有重要意义。IPIDEA代理I…

如何在不同设备上检查您的 IP 地址?

IP 地址&#xff08;Internet 协议地址&#xff09;是网络上设备的唯一标识符。了解如何查找 IP 地址对于解决网络问题、设置网络设备和维护网络安全非常重要。本文将详细介绍如何在不同设备上检查 IP 地址&#xff0c;包括 Windows 计算机、Mac 计算机、智能手机&#xff08;A…

ChatGPT协助撰写研究论文的11种方法【全集】

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 当我们使用 ChatGPT 时&#xff0c;原本那些需要花费数小时、数天、有时甚至更长时间的任务现在只需几分钟甚至更短时间。 今天的分享&#xff0c;我们将谈谈 ChatGPT 在研究论文方面可…

bash增加命令行参数

使用getopt 示例如下&#xff1a; TEMPgetopt -o j: --long job:,install -- "$" eval set -- "$TEMP"INSTALL PACKAGE JOB_NUM$(nproc)while true ; docase "$1" in--install) INSTALL"ON"; shift ;;-j | --job) JOB_NUM$2; shift 2…

C#中多线程编程中的同步、异步、串行、并行及并发及死锁

在C#中&#xff0c;多线程编程是一个强大的功能&#xff0c;它允许程序同时执行多个任务。然而&#xff0c;这也带来了复杂性&#xff0c;特别是在处理同步、异步、串行、并行、并发以及死锁等问题时。下面我将详细解释这些概念&#xff0c;并给出一些C#中的示例和注意事项。 …

常见中间件漏洞(三、Jboss合集)

目录 三、Jboss Jboss介绍 3.1 CVE-2015-7501 漏洞介绍 影响范围 环境搭建 漏洞复现 3.2 CVE-2017-7504 漏洞介绍 影响范围 环境搭建 漏洞复现 3.3 CVE-2017-12149 漏洞简述 漏洞范围 漏洞复现 3.4 Administration Console弱囗令 漏洞描述 影响版本 环境搭建…

C++ 指针和引用的区别?

C中指针和引用的区别&#xff1f; 指针是一个变量&#xff0c;其指向一个地址&#xff0c;本身也占用内存&#xff1b;引用只是个原变量别名&#xff0c;本身不占用内存。指针可以为空&#xff0c;并且可以改变指向&#xff1b;而引用必须初始化且不能再改变。sizeof函数作用于…