ThreadPoolExecutor(线程池)

1. 参数详解

corePoolSize

核心线程数,初始化时创建的线程数

maximumPoolSize

最大线程数,当核心线程和队列占满时,会扩展线程数直到maximumPoolSize所定义的最大值。

keepAliveTime

扩展线程(核心线程数不够时,所新增的线程)最大空闲时间值

unit

扩展线程空闲时间单位(天,时,分,秒,毫秒,微秒,纳秒)

workQueue

工作队列,当核心线程占满时,多余的任务放进阻塞队列里面,在线程空闲之后执行队列里面的任务。

threadFactory

创建线程的工厂,可以扩展一些当前线程池需要的功能

handler

拒绝处理器,定义了当线程以及队列都占满时,后续任务拒绝处理策略。

2. 运行机制

  1. 初始化时,会创建corePoolSize个核心线程数。
  2. 当核心线程占满时,后续任务会放进工作队列workQueue里面
  3. 当核心线程和工作队列都占满时,如果maximumPoolSize>corePoolSize,并且还有新任务时,创建新的线程,直到线程数等于最大值maximumPoolSize。
  4. 当线程数等于maximumPoolSize且都占满,同时队列也占满。表示当前线程池已经处理不了后续的任务了,此时后续任务会进行拒绝处理。即走handler处理器的逻辑。
  5. 当任务量下降时,队列里面的任务会依次执行,当任务执行完之后。扩展的线程在keepAliveTime时间内没有执行新的任务即可进行回收,释放多余的资源。

你可能感兴趣的:(ThreadPoolExecutor(线程池))