Java 线程池

关于 Java 的线程池。

可以使用 ThreadPoolExecutor 创建线程池,但是在 Java doc中,并不提倡我们直接使用 ThreadPoolExecutor,而是使用 Executors 类中提供的几个静态方法来创建线程池。

1
2
3
4
5
ExecutorService executor = Executors.newFixedThreadPool(10);

Executors.newSingleThreadExecutor(); //创建容量为1的缓冲池
Executors.newFixedThreadPool(); //创建固定容量大小的缓冲池
Executors.newCachedThreadPool(); //创建一个缓冲池,缓冲池容量大小为Integer.MAX_VALUE

不过,《阿里巴巴 Java 开发手册》中提出,不要使用 Executors 去创建线程池,因为:

说明: Executors 返回的线程池对象的弊端如下:

1) FixedThreadPool 和 SingleThreadPool :

允许的请求队列长度为 Integer.MAX_VALUE ,可能会堆积大量的请求,从而导致 OOM 。

2) CachedThreadPool 和 ScheduledThreadPool :

允许的创建线程数量为 Integer.MAX_VALUE ,可能会创建大量的线程,从而导致 OOM 。

参考资料

  1. Java并发编程:线程池的使用
  2. 阿里巴巴Java开发手册 1.4.0(详尽版).pdf
  3. 深入学习 Java 线程池 - ImportNew