ThreadPoolExecutor的七大常用参数
参数 | 作用 |
---|---|
corePoolSize(核心线程数) | 1. 创建线程池时,默认线程数为0; 2. 当有任务请求时,如果线程数小于核心线程数,线程池会创建一个线程去执行此任务;如果线程数大于等于核心线程数,把任务放到缓存队列中 |
queueCapacity(任务队列容量,即阻塞队列) | 是spring线程池的参数,默认值Integer.MAX_VALUE |
workQueue(任务队列) | 是JDK线程池的参数,用来存储被提交但尚未被执行的任务 |
maximumPoolSize(最大线程数) | 1. 核心线程数<=线程数<最大线程数 ,且任务队列已满,线程池会创建新的线程执行任务; 2. 线程数 = 最大线程数,且任务队列已满,线程池会拒绝执行任务并抛出异常 |
keepAliveTime(线程空闲时间) | 当线程数超过核心线程数时,会将部分线程空闲时间超过keepAliveTime的线程销毁,直到线程数等于核心线程数 |
allowCoreThreadTimeout(允许核心线程超时) | 若线程空闲不允许退出(默认false) |
handler(拒绝策略) | 当线程数量达到maxPoolSize时的处理策略 |
四大拒绝策略
名称 | 作用 |
---|---|
AbortPolicy | 默认拒绝策略,丢弃任务并抛出RejectedExecutionException异常 |
DiscardPolicy | 丢弃任务,但是不抛出异常。如果线程队列已满,则后续提交的任务都会被丢弃,且是静默丢弃 |
DiscardOldestPolicy | 丢弃队列最前面的任务,然后重新提交被拒绝的任务 |
CallerRunsPolicy | 由调用线程处理该任务 |
Java线程池实现原理及其在美团业务中的实践
线程池原理:https://www.jianshu.com/p/9a8c81066201