线程池中重要的配置
- corePoolSize : 核心线程数量
- workQueue : 等待队列
- maximumPoolSize : 最大线程数量
提交任务时,判断的顺序为 corePoolSize --> workQueue -->maximumPoolSize
当线程数小于核心线程数时,创建核心线程
当线程大于等于核心线程数,且任务队列未满时,将任务放入队列
当线程数大于核心线程数,且任务队列已满时,检查最大线程数是否已满,若未满,创建非核心线程,若满,根据拒绝策略抛出异常拒绝任务。
拒绝策略—RejectedExecutionHandler
- AbortPolicy : 直接抛出异常,这是默认策略
- CallerRunsPolicy : 用调用者所在线程来执行任务
- DiscardOldestPolicy : 丢弃阻塞队列中最靠前的任务,并执行当前任务
- DiscardPolicy : 直接丢弃任务
遇到的坑!!!
- 任务提交后长时间没有执行
1.任务进入了队列,线程还在执行之前的任务。提交的任务还在排队等待执行中
- 线程执行任务中无故消失
1. 线程拒绝策略配置为CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy时 ,线程池满了不会抛出异常。建议将拒绝策略配置为AbortPolicy
2. 一般情况下,代码只会去捕捉Exception,如果抛出Error(比如内存溢出)则会导致线程退出,而异常信息又没有拿到。最佳的解决办法是给线程池设置UncaughtExceptionHandler
参考地址
Java线程池使用的注意事项 https://www.jianshu.com/p/340f23001a65
欢迎关注微信公众号:shoshana
分类:
corejava-高级应用
, corejava-基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2018-11-24 电商-大中台+小前端
2018-11-24 新零售的舞台上,创业者如何与大象共舞
2018-11-24 无人零售的黑科技:RFID技术