从核心参数讲起
1.核心线程数corePollSize
含义: 线程存活的线程数。
作用: 用于判断线程数量是否大于等于corePollSize,如果小于则addWorks创建新线程;否则加入阻塞队列当中。
2:最大线程数
含义:线程池允许的最大线程数。
作用: 用于判断是否开启拒绝策略。当线程数大于等于核心线程数,加入阻塞队列之后,当阻塞队列满了之后,会创建临时线程(非核心线程),当临时线程+核心线程大于最大线程数则会触发拒绝策略。
3.workQueue任务队列(阻塞队列)
含义:存储待执行的任务。
作用:存储任务,当线程数大于等于核心线程数时加入。任务队列有两种类型,有界队列和无界队列。两者区别:arrayBockingQueue有界,当队列满的时候会开始拒绝策略,linkBockingQueue无界队列,相反,理论上可以容纳无线任务。
4.空闲时间(线程存活时间)keepAlivesTime。
含义:线程存活时间。
作用:当线程数大于等于核心线程数,进入阻塞队列之后,并且阻塞队列满了之后但不大于最大线程数,创建的非核心线程(临时线程),存活的时间。
5.unit时间单位:
含义:非核心线程存活时间的单位。
6.handler拒绝策略。
含义:队列已满并且大于最大线程数之后,开始的拒绝策略。
作用:拒绝策略有四种,默认为AbortaPolic策略,直接抛出拒绝策略异常。
第二种由提交任务的线程自己执行任务。
第三种直接丢弃任务不做处理。
第四种丢弃队列种最老的任务,然后尝试提交新任务。
02-10
946