文章插图
- 线程池在中止后不能再受理新的任务
- 线程池中止的过程中,已经提交的现存任务不能丢失(等待剩余任务执行完再关闭或者能够把剩余的任务吐出来还给用户)
- 线程池最终关闭前,确保创建的所有工作线程都已退出,不会出现资源的泄露
ThreadPoolExecutor的其它功能除了正常的工作流程以及优雅停止的功能外,ThreadPoolExecutor还提供了一些比较好用的功能
- 提供了很多protected修饰的钩子函数,便于用户继承并实现自己的线程池时进行一定的拓展
- 在运行时统计了总共执行的任务数等关键指标,并提供了对应的api便于用户在运行时观察运行状态
- 允许在线程池运行过程中动态修改关键的配置参数(比如corePoolSize等),并实时的生效 。
前面提到ThreadPoolExecutor的核心逻辑主要分为两部分,一是正常运行时处理提交的任务的逻辑,二是实现优雅停止的逻辑 。因此我们实现的线程池MyThreadPoolExecutor(以My开头用于区分)也会分为两个版本,v1版本只实现前一部分即正常运行时执行任务的逻辑,将有关线程池优雅停止的逻辑全部去除 。相比直接啃jdk最终实现的源码,v1版本的实现会更简单更易理解,让正常执行任务时的逻辑更加清晰而不会耦合太多关于优雅停止的逻辑 。
线程池关键成员变量介绍ThreadPoolExecutor中有许多的成员变量,大致可以分为三类 。
可由用户自定义的、用于控制线程池运行的配置参数
- volatile int corePoolSize(最大核心线程数量)
- volatile int maximumPoolSize(最大线程数量)
- volatile long keepAliveTime(idle线程保活时间)
- final BlockingQueue workQueue(工作队列(阻塞队列))
- volatile ThreadFactory threadFactory(工作线程工厂)
- volatile RejectedExecutionHandler handler(拒绝异常处理器)
- volatile boolean allowCoreThreadTimeOut(是否允许核心线程在idle超时后退出)
经验总结扩展阅读
- 如何保护环境
- 哥哥给弟弟的生日祝福句子
- 送给自己的生日快乐句子
- 闺蜜生日快乐的祝福语
- 哪些星座善于伪装自己 不会轻易透露隐私
- 廉租房能自己装修吗 廉租房申请下来可以不住吗
- 申请廉租房需要查自己的个人征信吗 公租房与廉租房的区别在哪里
- 廉租房需要摇号吗 廉租房需要自己装修吗
- 自己手剥核桃仁怎么储存
- 我的Vue之旅 10 Gin重写后端、实现页面详情页 Mysql + Golang + Gin