当前位置:网站首页>线程池的使用二
线程池的使用二
2022-07-31 13:25:00 【ZeKi_豪】
- 业务场景:
- 导入文件,要处理文件中一堆数据,为了用户体验只能导入后立马返回
上传成功
,实际则是直接先记录导入状态(处理中
),然后线程池处理完把状态改为处理完成
- 上传文件,将文件存放进自己dfs文件系统,拿到地址url链接,然后生成一个任务id在数据库表中记录及该地址url, 把新建的任务id放入本地缓存
ConcurrentLinkedQueue
中
- 上传文件,将文件存放进自己dfs文件系统,拿到地址url链接,然后生成一个任务id在数据库表中记录及该地址url, 把新建的任务id放入本地缓存
- 往线程池中扔线程任务异步处理业务, 异步处理线程任务,任务从本地缓存
ConcurrentLinkedQueue
中获取表数据的任务id从而获取该文件的url地址,拿到该文件的数据,然后遍历文件数据进行业务处理,处理完毕则更新数据库状态为处理成功
或处理失败
- 往线程池中扔线程任务异步处理业务, 异步处理线程任务,任务从本地缓存
线程池
- 定义线程池,调用方法
execute
将线程任务扔进去
public class BossThreadFactory {
public static ThreadPoolExecutor threadPoolExecutor;
static {
int corePoolSize = 2;
threadPoolExecutor = new ThreadPoolExecutor(corePoolSize, 2, 1, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(20), new ThreadFactoryBuilder().setNameFormat("boss-%d").build(),
new ThreadPoolExecutor.AbortPolicy());
}
public static void execute(Runnable runnable){
threadPoolExecutor.execute(runnable);
}
}
线程任务
@Component
public class NumberStateThread extends Thread {
private static final Logger logger = LoggerFactory.getLogger(NumberStateThread.class);
// 存放导入文件的任务id
public static ConcurrentLinkedQueue<Integer> threadLinkedQueue = new ConcurrentLinkedQueue<>();
@Override
public void run() {
// 往本地缓存队列拿出数据
Integer taskId = threadLinkedQueue.poll();
//处理后续业务
}
}
实战(参考即可)
- 放入线程任务进线程池
@Autowired
private NumberStateThread numberStateThread;
@Override
public Result uploadFile(MultipartFile file) throws Exception {
//往本地缓存队列放入数据
boolean offerB = NumberStateThread.threadLinkedQueue.offer(mobileTypeState.getId());
if (offerB) {
logger.info("【checkStateNumberUpload】将任务ID[{}]放入本地缓存队列成功", mobileTypeState.getId());
//将线程任务放进线程池执行
BossThreadFactory.execute(numberStateThread);
}
}
边栏推荐
- 机器学习模型验证:被低估的重要一环
- Invalid bound statement (not found)出现的原因和解决方法
- pytorch gpu版本安装最新
- A detailed explanation of the usage of Async and Await in C#
- C# List Usage List Introduction
- Selenium自动化测试之Selenium IDE
- 基于改进YOLOv5的轻量化航空目标检测方法
- Golang - gin - pprof - use and safety
- ECCV 2022 | Robotic Interaction Perception and Object Manipulation
- 基于神经网络的多柔性梁耦合结构振动控制
猜你喜欢
IDEA版Postman插件Restful Fast Request,细节到位,功能好用
VU 非父子组件通信
4.爬虫之Scrapy框架2数据解析&配置参数&数据持久化&提高Scrapy效率
Golang - gin - pprof - use and safety
IDEA的database使用教程(使用mysql数据库)
技能大赛训练题:域用户和组织单元的创建
ICML2022 | 面向自监督图表示学习的全粒度自语义传播
深度剖析 Apache EventMesh 云原生分布式事件驱动架构
Detailed explanation of network protocols and related technologies
技能大赛dhcp服务训练题
随机推荐
Error: npm ERR code EPERM
分布式锁有哪些,怎么实现(分布式锁的三种实现的对比)
关于MySQL主从复制的数据同步延迟问题
ECCV2022: Recursion on Transformer without adding parameters and less computation!
Introduction to using NPM
基于去噪自编码器的故障隔离与识别方法
C#控件StatusStrip使用
3.爬虫之Scrapy框架1安装与使用
技能大赛训练题: 子网掩码划分案例
C# List用法 List介绍
EasyMock日记1[通俗易懂]
TensorRT安装及使用教程「建议收藏」
AI cocoa AI frontier introduction (7.31)
为什么 wireguard-go 高尚而 boringtun 孬种
中望3D 2023正式发布,设计仿真制造一体化缩短产品开发周期
PHP Serialization: eval
C#使用NumericUpDown控件
Using SQL Server FOR XML and FOR JSON syntax on other RDBMSs with jOOQ
爱可可AI前沿推介(7.31)
numpy矩阵和向量的保存与加载,以及使用保存的向量进行相似度计算