【踩坑实录】生产上遇到的并发问题总结

生产上遇到很多并发问题,有很多是在编码阶段就可以避免的,总结一些需要考虑的要点如下:

  1. 使用并发的常见场景为针对大数据量遍历处理,考虑性能,采用并发处理。这是CPU密集型任务场景,同时出现多个任务时,性能不见得最优。
  2. 并发也有开销,不建议无脑并发。并发后堆栈会丢失,不方便排查问题。
  3. 异步开发模式具有传染性,比如使用可回调 Future 后,如果想要避免阻塞问题,需要使用map、flatMap语义。折中的方法是参考结构化并发,在必要位置等待,获取结果后清理资源。
  4. 需要注意副作用,尽量不要使用副作用。尽量不要修改共享的内容,比如本地缓存。
  5. 使用线程安全类 + 原子方法, ConcurrentHashMap 和 HashMap 相比,性能差别不大,而且内存占用基本一致,很多情况下可以直接替换。灵活使用 merge、computeIfAbsent 等方法,比如需要择优的场景,不需要重复写写命令式的逻辑。
  6. 考虑单次加载实现
  7. ConcurentHashMap 高并发时,可能有阻塞等待同一个桶位的问题,必须指定初始大小。
  8. 考虑线程池阻塞队列消费速度,防止某些捣蛋线程。
  9. 考虑处理拒绝任务异常,设计 fallback 策略。
  10. 并发超时或者任务取消时很容易出现线程泄露。
  11. 监控并发收益。
  12. 监控阻塞线程,防止惊群效应。
相关推荐
Bs_MoneyMagnet1 小时前
基于springboot+vue的在线音乐管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
小番茄程序猿1 小时前
Agent 工程化实测:p95 从 836ms 降到 12ms,而真正的收获是发现瓶颈根本不在 Agent 这层
后端
YangYang9YangYan1 小时前
2026 校招管理会计 JD 拆解,数据分析能力要求与工具清单
java·数据库·数据分析
仍然.1 小时前
SpringCloud---Seata
spring boot·后端·spring cloud
写后端的胖头鱼2 小时前
【高频面试题】分布式锁在项目中的应用
java·分布式·后端·分布式锁·高频面试题
CoderYanger2 小时前
Java EE 进阶:2.3 JavaScript
java·开发语言·前端·javascript·css·职场和发展·java-ee
凤山老林2 小时前
Spring Boot + OpenSearch 实战:搞定全文检索、向量召回与混合排序
spring boot·后端·全文检索·向量·opensearch·全文索引
Wang's Blog2 小时前
Java框架快速入门: Spring Security+OAuth2之前后端分离多模块工程配置
java·spring·状态模式
梅梅绵绵冰2 小时前
SpringCloud网关
java·spring·spring cloud
敲代码的嘎仔2 小时前
互动问答系统实战:两级评论模型、ES 搜索集成、Caffeine 多级缓存全记录
java·开发语言·数据库·elasticsearch·缓存·mybatis·高并发