好端端的线程池,怎么就卡死了?
笔记哥 /
05-22 /
10点赞 /
0评论 /
121阅读
# 写在前面
最近,我们的业务收到一项报障,线上某个业务模块偶尔会出现无法正常工作的情况。
经过多方排查,最终确认是线程池使用方式不合理导致的。鉴于线程池使用的普遍性和该类问题的隐秘性,本文将其中涉及的“坑”整理出来,与大家分享。
本文将尽可能淡化业务本身,着重介绍其中的技术问题。
# 场景说明
该业务链路有三个节点,分别为“演示调度入口”、“获取数据”,以及“推送数据”:

其中,三个节点配置了同一个线程池,为呈现更为直观,将实际业务代码做了必要的内联和简化处理,如下:
```java
private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5);
public void handle() {
// 线程延迟调度(第一个节点,调度后续两个节点)
executor.schedule(() -> {
doHandle();
}, 10L, TimeUnit.MILLISECONDS);
}
private List fetchData() {
CompletableFuture
- > future = CompletableFuture.supplyAsync(() -> {
// 模拟数据获取业务逻辑(第二个节点)
}, executor);
return future.get();
}
private void doHandle() {
// 推送数据业务逻辑(第三个节点,需要等第二个节点的数据获取完毕)
List
- > future = CompletableFuture.supplyAsync(() -> {
System.out.println("任务 " + taskId + " - 第二个节点开始执行,线程编号: " + Thread.currentThread().getId());
// 模拟数据获取业务逻辑(第二个节点)
Random random = new Random();
int delay = 500 + random.nextInt(2000); // 随机延迟时间
try {
Thread.sleep(delay); // 模拟耗时操作
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("任务 " + taskId + " - 第二个节点执行完成,线程编号: " + Thread.currentThread().getId());
return new ArrayList
- > future = CompletableFuture.supplyAsync(() -> {
// 模拟数据获取业务逻辑(第二个节点)
}, stage2Pool);
return future.get();
}
private void doHandle() {
// 推送数据业务逻辑(第三个节点,需要等第二个节点的数据获取完毕)
List
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/3607
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利