如何从Executor核心理解线程池,12分钟内彻底搞懂?
- 内容介绍
- 文章标签
- 相关推荐
如何从Executor核心理解线程池,12分钟内彻底搞懂?
在ThreadPoolExecutor的基础上, 还有个做定时的线程池ScheduledThreadPoolExecutor,说白了就是...
ThreadPoolExecutor主要有七个重要的参数

本篇文章笔记以及案例被收入 gitee-StudyJava、 github-StudyJava 感兴趣的同学可以stat下持续关注喔~
线程池的优势
先说说我们要明白创建线程是有开销的,程序计数器、 功力不足。 虚拟机栈、本地方法栈都是线程私有的空间
如果已达到最大线程数量则使用拒绝策略
| 拒绝策略 | 作用 |
|---|---|
| AbortPolicy | 抛出异常 |
| DiscardPolicy | 不处理,丢弃 |
| DiscardOldestPolicy | 丢弃队列中最近一个任务,并马上施行当前任务 |
| CallerRunsPolicy | 调用线程来施行任务 |
通常使用shutdown,如果任务不一定要施行完可以使用shutdownNow,试试水。
线程池的实现原理
踩雷了。 public void execute { ... }
内卷。 如果阻塞队列已满,还未达到最大线程数量则创建非核心线程施行任务
物超所值。 如果工作队列线程数量小于核心线程数,则创建线程来施行
如果工作队列线程数量大于核心线程数量,并且阻塞队列未满则放入阻塞队列,大体上...
处理异常和关闭线程池的方法:
shutdown,shutdownNowScheduledThreadPoolExecutor定时任务原理:
ScheduledThreadPoolExecutor在ThreadPoolExecutor的基础上提供定时施行的功能, 它的实现依赖于延迟队列DelayedQueue。
| 方法名称 | 描述 |
|---|---|
| 固定频率施行任务,以任务开始为周期起点。 |
| 固定延迟施行任务,以任务结束为周期起点。 |
如何配置合理的线程池参数?
- CPU密集型:设置最大线程数量为CPU核心数+1。
- IO密集型:设置为2倍CPU核数。
具体业务场景需要具体分析,然后加上大量测试才能得到最合理的配置。
:
- Executor框架将工作任务与施行解耦分离,提高系统的灵活性和可 性。
- 合理配置和优化线程池参数,The
ScheduledThreadPoolExecutor, 基于延迟队 Delay 列实现定时调度。
public interface Exec 我跟你交个底... utor { void execute; }
如何从Executor核心理解线程池,12分钟内彻底搞懂?
在ThreadPoolExecutor的基础上, 还有个做定时的线程池ScheduledThreadPoolExecutor,说白了就是...
ThreadPoolExecutor主要有七个重要的参数

本篇文章笔记以及案例被收入 gitee-StudyJava、 github-StudyJava 感兴趣的同学可以stat下持续关注喔~
线程池的优势
先说说我们要明白创建线程是有开销的,程序计数器、 功力不足。 虚拟机栈、本地方法栈都是线程私有的空间
如果已达到最大线程数量则使用拒绝策略
| 拒绝策略 | 作用 |
|---|---|
| AbortPolicy | 抛出异常 |
| DiscardPolicy | 不处理,丢弃 |
| DiscardOldestPolicy | 丢弃队列中最近一个任务,并马上施行当前任务 |
| CallerRunsPolicy | 调用线程来施行任务 |
通常使用shutdown,如果任务不一定要施行完可以使用shutdownNow,试试水。
线程池的实现原理
踩雷了。 public void execute { ... }
内卷。 如果阻塞队列已满,还未达到最大线程数量则创建非核心线程施行任务
物超所值。 如果工作队列线程数量小于核心线程数,则创建线程来施行
如果工作队列线程数量大于核心线程数量,并且阻塞队列未满则放入阻塞队列,大体上...
处理异常和关闭线程池的方法:
shutdown,shutdownNowScheduledThreadPoolExecutor定时任务原理:
ScheduledThreadPoolExecutor在ThreadPoolExecutor的基础上提供定时施行的功能, 它的实现依赖于延迟队列DelayedQueue。
| 方法名称 | 描述 |
|---|---|
| 固定频率施行任务,以任务开始为周期起点。 |
| 固定延迟施行任务,以任务结束为周期起点。 |
如何配置合理的线程池参数?
- CPU密集型:设置最大线程数量为CPU核心数+1。
- IO密集型:设置为2倍CPU核数。
具体业务场景需要具体分析,然后加上大量测试才能得到最合理的配置。
:
- Executor框架将工作任务与施行解耦分离,提高系统的灵活性和可 性。
- 合理配置和优化线程池参数,The
ScheduledThreadPoolExecutor, 基于延迟队 Delay 列实现定时调度。
public interface Exec 我跟你交个底... utor { void execute; }

