先从一句代码开始,//创建固定线程数的线程池:
newFixedThreadPool = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
跟进这个方法,发现是一套默认参数创建出的ThreadPoolExecutor,而实际上,构造参数的参数是很多的,有门道
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
那么来举例说明ThreadPoolExecutor的参数策略:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
corePoolSize==10, 池内会维持10个线程,哪怕完全没有作业进入,或者是作业过多排队。
maximumPoolSize==20 ,池内线程数最多可以达到20个,再多就不行了:) 但是能不能突破10,还需结合下面的参.