线程池不恰当的设置会导致效率低下,设置低于单线程的效率。
corePoolSize,核心线程数的个数。
当线程池被创建时,默认的情况下是没有线程产生的,除非调用了prestartCoreThread()的方法。这里假设没有调用prestartCoreThread(),那么一开始的时候线程的个数为0。
直到有任务进来,每一个任务进来,就会对应一个线程的产生。当线程的个数达到核心线程的个数时,会把任务放到等待队列中去,queueCapacity表示该队列可以存放的任务个数大小。
当等待队列中的任务个数达到queueCapacity的时候,并且当前线程个数是大于等于核心线程数时,线程的个数就会再次增加,一直增加到maxPoolSize的值。
当线程个数已经达到maxPollSize时,新进来的任务会被拒绝处理然后抛出异常。
当任务并不是很多的时候,线程就会处于空闲状态。当线程空闲时间达到keepAliveTime,该线程会退出,直到线程数量等于corePoolSize。如果allowCoreThreadTimeout设置为true,则核心线程也会推出,即所有线程均会退出直到线程数量为0。