java 线程池 学习记录
线程池构造函数参数有哪些
- 核心线程池
- 最大线程数
- 空闲非核心线程存活时长
- 空闲非核心线程存活时长单位
- 阻塞队列
- 线程生产工厂
- 拒绝执行处理类
execute和submit有什么区别?
- execute会抛出异常
- submit不会抛出异常
线程池怎么处理异常
- 方式一:在提交的任务中将异常捕获并处理,不抛给线程池。
- 继承线程池,重写execute/submit,并使用try catch处理异常
- 或者在自定义的runnable或者callable中catch异常
- 方式二:异常抛给线程池,但是我们要及时处理抛出的异常。
- 重写线程生产工厂,给每个生产的线程类设置UncaughtExceptionHandler
- 重写线程生产工厂,给每个生产的线程设置ThreadGroup(这里已经定义处理了异常的逻辑)
- 自定义线程池,重写afterExecute,在afterExecute中处理异常
- 采用Future模式,使用future.get()可以处理异常
如果想要在执行过程中把ThreadLocal参数进行传递,该怎么操作?
- 继承线程池类
- 重写submit方法
- 在submit的时候将ThreadLocal/MDC参数,提取并放到Runnable的私有属性中
- 在Runnable中的run方法执行的时候,将私有属性中的ThreadLocal参数或者MDC参数放到当前线程的ThreadLocal或者MDC中
- run方法执行结束后,需要把当前线程中ThreadLocal参数或者MDC参数清空
线程池的执行过程
- 当有任务提交的时候,检查核心线程是否满了
- 没满,启动新的线程进行执行
- 满了,则将任务放到阻塞队列中去
- 当阻塞队列满了,检查线程数是否已经到达最大线程数
- 没到达最大线程数,启动新的线程处理任务
- 满了,调用拒绝执行处理类进行处理
线程池
- 类:ThreadPoolExecutor
作者:cgengwei
出处:https://www.cnblogs.com/cgengwei/p/16637952.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~