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

【CouponHub项目开发】EasyExcel解析Excel并使用线程池异步执行和延时队列兜底

文章目录

    • 为什么使用Excel
    • 为什么使用线程池进行异步执行
    • 为什么使用延时队列进行兜底
    • 线程池的核心参数
    • 拒绝策略有哪些

为什么使用Excel

因为在特定电商场景下,可能会出现比如有的平台会根据用户的喜好从而生成一些用户画像,企业再从画像平台去获取特定喜好的用户,会得到一个Excel表格。

为什么使用线程池进行异步执行

因为如果表格的内容很多,百万级别的数据。那么如果是单线程运行情况下,会导致用户等待大量时间使用线程池异步执行则可以直接返回用户操作成功的响应,而真正的操作是交给后台线程异步执行的

为什么使用延时队列进行兜底

因为如果任务刚提交到线程池当中就宕机了,那么线程池当中的任务就不会执行了,为了解决这种情况,采用延时队列进行兜底。

在这里插入图片描述
首先定义EasyExcel中的行数监听器

在这里插入图片描述
创建优惠券分发任务,并将其存入数据库当中。
在这里插入图片描述
然后通过线程池去异步执行更新数据库当中优惠券分发任务的sendnum字段。
在这里插入图片描述
然后创建一个阻塞队列,然后基于这个阻塞队列创建一个延时队列
delayedQueue.offer(delayJsonObject, 20, TimeUnit.SECONDS);作用是:设置延时时间,到时间后将延时队列里的信息传到阻塞队列中,这也是为什么能从阻塞队列中获取delayJsonObject的原因

在这里插入图片描述
接着我们定义一个延时队列的消费者。他在项目运行时创建一个线程,去获取Redis当中的阻塞队列。然后不断循环去获取阻塞队列中的delayJSON,然后再根据delayJSON中的id去查询数据库,判断数据库中这个优惠券分发任务的分发数量是否为0.如果为0说明线程池没有去执行 refreshCouponTaskSendNum方法,然后让该线程去执行。

线程池的核心参数

1.核心线程数
2.最大线程数
3.工作队列
4.keepAliveTime
5.keepAliveTime的单位unit
6.ThreadFactory
7.handler拒绝策略

拒绝策略有哪些

1.CallerRunsPolicy使用线程池的调用者所在的线程去执行被拒绝的任务
2.AbortPolicy直接抛出异常
3.DiscardPolicy直接拒绝,不做任何处理
4.DiscardOldestPolicy抛弃最老的,然后执行该任务


文章转载自:

http://Xz1xrcJ6.cttgj.cn
http://OzZz7QDp.cttgj.cn
http://TXjBE6vf.cttgj.cn
http://tk47gIRG.cttgj.cn
http://Zsf9WWuS.cttgj.cn
http://JnRR4G7L.cttgj.cn
http://I8qzZIIX.cttgj.cn
http://D3RqzxOS.cttgj.cn
http://swkKRSkA.cttgj.cn
http://fZzJDeHV.cttgj.cn
http://VK4l6xhv.cttgj.cn
http://hUYsCGoN.cttgj.cn
http://pd7CaKls.cttgj.cn
http://Roh50h6O.cttgj.cn
http://g5Q28C9W.cttgj.cn
http://Qnmi7yZI.cttgj.cn
http://fCQX6HyO.cttgj.cn
http://weat99zr.cttgj.cn
http://UjcNlggJ.cttgj.cn
http://t35tdmQg.cttgj.cn
http://CZ0HfvCQ.cttgj.cn
http://rvhmVZUr.cttgj.cn
http://pfvMZTD8.cttgj.cn
http://clHAAGCn.cttgj.cn
http://4o6kR30X.cttgj.cn
http://gzkDkXPi.cttgj.cn
http://EeSEsy3j.cttgj.cn
http://JJD5Yhqh.cttgj.cn
http://W3kJ046r.cttgj.cn
http://ILGVaRch.cttgj.cn
http://www.dtcms.com/a/366300.html

相关文章:

  • 鸿蒙:从图库选择图片并上传到服务器
  • sqlserver2008导入excel表数据遇到的问题
  • 【MFC中OnInitDialog虚函数详解:哪个是虚函数?两个OnInitDialog的关系】
  • 算法-根据前序+中序遍历打印树的右视图
  • vite与webpack对比
  • 用AI做TikTok影视解说,全流程全自动成片,不懂外语也能做全球矩阵!
  • 开源混合专家大语言模型(DBRX)
  • GitHub 热榜项目 - 日榜(2025-09-04)
  • openEuler2403安装部署Kafka
  • CDN加速的安全隐患与解决办法
  • (E题|AI 辅助智能体测)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • Process Explorer 学习笔记(第三章3.1.2):管理权利与提权机制解析)
  • SQL Server服务管理
  • OpenAI开放ChatGPT Projects功能,免费用户也能用了!
  • 【已更新文章+代码】2025数学建模国赛A题思路代码文章高教社杯全国大学生数学建模-烟幕干扰弹的投放策略
  • Java集合---Collection接口和Map接口
  • 应对反爬:使用Selenium模拟浏览器抓取12306动态旅游产品
  • PDF.AI-与你的PDF文档对话
  • Apache PDFBox 与 spire.pdf for java 使用记录
  • Access开发导出PDF的N种姿势,你get了吗?
  • 那些年我们一起追过的Java技术,现在真的别再追了!
  • 记一次 Nuxt 3 + pnpm Monorepo 中的依赖地狱:`@unhead/vue` 引发的致命错误
  • 前端基础(四十三):文本数据解析为键值对
  • vue3入门- script setup详解上
  • JS(DOM对象)
  • Linux内存管理章节三:绘制Linux的内存地图:内核与用户空间布局详解
  • window使用ffmep工具,加自定义脚本执行视频转码成h264(运营人员使用)
  • webrtc之语音活动上——VAD能量检测原理以及源码详解
  • STM32H750 RTC介绍及应用
  • Rewind-你人生的搜索引擎