ThreadPoolExecutor构造时的关键参数如下:
corePoolSize
maximumPoolSize
keepAliveTime
unit
workQueue
当前的线程数小于corePoolSize时,只要有新任务提交,无论已经启动的线程是否处于IDLE状态,pool都会创建一个新线程来执行这个新任务。当前的线程数等于corePoolSize时, 如果有新任务提交,若workQueue未满,则将新任务加入workQueue;若workQueue已满,pool会创建一个新线程,从workQueue顶部取出一个任务处理,同时将新提交的任务放入workQueue。当前的线程数等于maximumPoolSize时,如果有新任务提交,若workQueue未满,则将新任务加入workQueue;若workQueue已满,则新任务会被丢弃。超出corePoolSize的线程处于IDLE状态超过keepAliveTime(unit是keepAliveTime的单位)后, 会自动退出。corePoolSize之内的线程在ThreadPoolExecutor shutdown之前默认是不会退出的,不过可以通过调用allowCoreThreadTimeout
来设置corePoolSize之内的线程处于IDLE状态超过keepAliveTime后是否退出。