线程池处理任务流程
线程池处理任务流程

-
线程池处理任务流程:
- 如果当前运行的线程数小于核心线程数,那么就会新建一个线程来执行任务
- 如果当前运行的线程数等于或大于核心线程数,但是小于最大线程数,那么就把该任务放入到任务队列里等待执行。
- 如果向任务队列投放任务失败(任务队列已经满了),但是当前运行的线程数是小于最大线程数的,就新建一个线程来执行任务。
- 如果当前运行的线程数已经等同于最大线程数了,新建线程将会使当前运行的线程超出最大线程数,那么当前任务会被拒绝,拒绝策略会调用
RejectedExecutionHandler.rejectedExecution()方法。
-
线程池在提交任务前,可以提前创建线程吗?
- 答案是可以的!
ThreadPoolExecutor提供了两个方法帮助我们在提交任务之前,完成核心线程的创建,从而实现线程池预热的效果:prestartCoreThread():启动一个线程,等待任务,如果已达到核心线程数,这个方法返回false,否则返回true;prestartAllCoreThreads():启动所有的核心线程,并返回启动成功的核心线程数
- 答案是可以的!
