没想到,这么简单的线程池用法,深藏这么多坑

楼下小黑哥 小黑十一点半

又又又踩坑了


生产有个对账系统,每天需要从渠道端下载对账文件,然后开始日终对账。这个系统已经运行了很久,前两天突然收到短信预警,没有获取渠道端对账文件。

“ps:对账系统详细实现方式:聊聊对账系统的设计方案

本以为又是渠道端搞事情,上去一排查才发现,所有下载任务都被阻塞了。再进一步排查源码,才发现自己一直用错了线程池某个方法。
由于线程创建比较昂贵,正式项目中我们都会使用线程池执行异步任务。线程池,使用池化技术保存线程对象,使用的时候直接取出来,用完归还以便使用。
虽然线程池的使用非常方法非常简单,但是越简单,越容易踩坑。细数一下,这些年来因为线程池导致生产事故也有好几起。
所以今天,小黑哥就针对线程池的话题,给大家演示一下怎么使用线程池才会踩坑。
希望大家看完,可以完美避开这些坑~

慎用 Executors 组件


Java 从 JDK1.5 开始提供线程池的实现类,我们只需要在构造函数内传入相关参数,就可以创建一个线程池。

不过线程池的构造函数可以说非常复杂,就算最简单的那个构造函数,也需要传入 5 个参数。这对于新手来说,非常不方便哇。
也许 JDK 开发者也考虑到这个问题,所以非常贴心给我们提供一个工具类 Executors,用来快捷创建创建线程池。
虽然这个工具类使用真的非常方便,可以少写很多代码,但是小黑哥还是建议生产系统还是老老实实手动创建线程池,慎用Executors,尤其是工具类中两个方法 Executors#newFixedThreadPool与 Executors#newCachedThreadPool。
如果你图了方便使用上述方法创建了线程池,那就是一颗定时炸弹,说不准那一天生产系统就会

©著作权归作者所有:来自51CTO博客作者mb5ff59251db416的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 从无到有,支付路由系统升级打怪之路|原创
  2. Linux基础-14day-Linux系统服务管理
  3. 支付路由系统演进史
  4. 聊聊对账系统的设计方案
  5. 协作,才能更好的中断线程
  6. Python 系统资源信息获取工具,你用过没?
  7. 【软考高级知识点】第一章.信息化和信息系统(一)
  8. PySimpleGUI 进阶| 原来用Python做一个图片查看系统,还能这么简单!
  9. Node.js多线程完全指南[每日前端夜话0x43]

随机推荐

  1. Android(安卓)Studio打开Android(安卓)De
  2. android sdk 离线下载地址及对应映射关系
  3. android中的布局文件
  4. Android开发 准备工作
  5. 动态添加TableRow
  6. Android中设置activity的background为Wal
  7. android 沉浸式主题记录
  8. android TextView属性详解
  9. Android控件visible,invisible和gone
  10. Android ListView CheckBox点击事件