背景
在上篇文章中java多线程:线程池的深度理解中,我们利用继承ThreadPoolExecutor类完成了线程池的创建。在JDK1.5以后增加了Executors类,该类提供了几种创建线程池的静态方法,比如:
但我们翻阅阿里java开发手册:文中醒目的用红字标明禁示用Executors创建以下四种类型的线程池。本文将通过对这些类型的线程池进行源码跟踪,逐个解析。
FixedThreadPool
FixedThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待,适用于为了满足资源管理的需求,而需要限制当前线程数量的应用场景,它适用于负载比较重的服务器。
跟踪下源码:
- 在静态方法newFixedThreadPool中new 了一个LinkedBlockingQueue对象,
- 而这个LinkedBlockingQueue类的构造函中通过Integer.MAX_VALUE对队列的容量做了无界值的设置
/**
*Executors.java
*/
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
...
/**
*LinkedBlockingQueue.java
*/
/**
* Creates a {@code LinkedBlockingQueue} with a capacity of
* {@link Integer#MAX_VALUE}.
*/
public LinkedBlockingQueue(