生产有个对帐系统,天天须要从渠道端下载对帐文件,而后开始日终对帐。这个系统已经运行了好久,前两天忽然收到短信预警,没有获取渠道端对帐文件。异步
“ide
ps:对帐系统详细实现方式:聊聊对帐系统的设计方案函数
本觉得又是渠道端搞事情,上去一排查才发现,全部下载任务都被阻塞了。再进一步排查源码,才发现本身一直用错了线程池某个方法。工具
因为线程建立比较昂贵,正式项目中咱们都会使用线程池执行异步任务。线程池,使用池化技术保存线程对象,使用的时候直接取出来,用完归还以便使用。线程
虽然线程池的使用很是方法很是简单,可是越简单,越容易踩坑。细数一下,这些年来由于线程池致使生产事故也有好几起。设计
因此今天,小黑哥就针对线程池的话题,给你们演示一下怎么使用线程池才会踩坑。code
但愿你们看完,能够完美避开这些坑~对象
Java 从 JDK1.5 开始提供线程池的实现类,咱们只须要在构造函数内传入相关参数,就能够建立一个线程池。blog
不过线程池的构造函数能够说很是复杂,就算最简单的那个构造函数,也须要传入 5 个参数。这对于新手来讲,很是不方便哇。开发
也许 JDK 开发者也考虑到这个问题,因此很是贴心给咱们提供一个工具类 Executors
,用来快捷建立建立线程池。
虽然这个工具类使用真的很是方便,能够少写不少代码,可是小黑哥仍是建议生产系统仍是老老实实手动建立线程池,慎用Executors
,尤为是工具类中两个方法 Executors#newFixedThreadPool
与 Executors#newCachedThreadPool
。
若是你图了方便使用上述方法建立了线程池,那就是一颗定时炸弹,说不许那一天生产系统就会