参数说明
- corePoolSize 核心线程数,默认线程池为空提交任务才创建线程,如果当前运 行的线程数少于corePoolSize,(空闲状态的线程也时运行的线程)则创建新线程来处理任务;如果等于或者多于corePoolSize,则不再创建,核心线程在未设置allowCoreThreadTimeOut时不会被销毁,执行任务后会进入空闲状态,
- maximumPoolSize 线程池允许创建的最大线程数
- keepAliveTime 非核心线程闲置的超时时
- TimeUnit keepAliveTime参数的时间单
- workQueue 任务队列
- ThreadFactory 线程工厂
- RejectedExecutionHandler 饱和策略。这是当任务队列和线程池都满了时所采取的应对策略
执行流程
- 如果线程池中的线程数未达到核心线程数,则创建核心线程处理任务。
- 如果线程数大于或者等于核心线程数,则将任务加入任务队列,线程池中的空闲线程会不断地从 任务队列中取出任务进行处理。
- 如果任务队列满了,并且线程数没有达到最大线程数,则创建非核心线程去处理任务。
- 如果线程数超过了最大线程数,则执行饱和策略。
饱和政策
- AbordPolicy,表示无法处理新任务,并抛出RejectedExecutionException异常。此外还有3种策略,它们分 别如下。
- CallerRunsPolicy:用调用者所在的线程来处理任务。此策略提供简单的反馈控制机制,能够减缓 新任务的提交速度。
- DiscardPolicy:不能执行的任务,并将该任务删除。
- DiscardOldestPolicy:丢弃队列最近的任务,并执行当前的任务。