正文
intmaximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue
workQueue)
//六个参数的构造函数
-1public ThreadPoolExecutor
(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue
workQueue,
ThreadFactory threadFactory)
//六个参数的构造函数
-2public ThreadPoolExecutor
(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue
workQueue,
RejectedExecutionHandler handler)
//七个参数的构造函数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue
workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
我知道你看到这些构造函数和我一样也是吓呆了,但其实一共就7种类型,理解起来简直和理解一周有7天一样简单,而且一周有两天是周末,其实也就只有5天需要了解!相信我,毕竟扯皮,我比较擅长
> **核心线程:**>
> 线程池新建线程的时候,如果当前线程总数小于corePoolSize,则新建的是核心线程,如果超过corePoolSize,则新建的是非核心线程>
> 核心线程默认情况下会一直存活在线程池中,即使这个核心线程啥也不干(闲置状态)。>
> 如果指定ThreadPoolExecutor的allowCoreThreadTimeOut这个属性为true,那么核心线程如果不干活(闲置状态)的话,超过一定时间(时长下面参数决定),就会被销毁掉>
> 很好理解吧,正常情况下你不干活我也养你,因为我总有用到你的时候,但有时候特殊情况(比如我自己都养不起了),那你不干活我就要把你干掉了
> 该线程池中**线程总数最大值**>
> 线程总数 = 核心线程数 + 非核心线程数。核心线程在上面解释过了,这里说下非核心线程:>
> 不是核心线程的线程(别激动,把刀放下...),其实在上面解释过了
> 该线程池中**非核心线程闲置超时时长**>
> 一个非核心线程,如果不干活(闲置状态)的时长超过这个参数所设定的时长,就会被销毁掉>
> 如果设置allowCoreThreadTimeOut = true,则会作用于核心线程
> keepAliveTime的单位,TimeUnit是一个枚举类型,其包括:>
> 1. NANOSECONDS : 1微毫秒 = 1微秒 / 1000> 2. MICROSECONDS : 1微秒 = 1毫秒 / 1000> 3. MILLISECONDS : 1毫秒 = 1秒 /1000> 4. SECONDS : 秒> 5. MINUTES : 分> 6. HOURS : 小时> 7. DAYS : 天