前文介绍到我们可以通过创建ThreadPoolExecutor对象来定制属于自己的线程池,在创建一个线程池时需要关注核心线程数,最大线程数,拒绝策略,线程构造工厂,任何队列等7个参数,相对而言,灵活度偏高,初次使用的开发者在参数设计和处理时,可能会有困惑,所以java.util.oncurrent并发工具包中也为我们提供了快捷创建线程池的工具类,用于创建常见模版线程,这个类叫做Executors

Executors

Executors中提供的函数及说明如下表所示:

结合上表,我们可以看出Executors中一共为我们提供了四类常用线程池,主要有:

  1. CachedThreadPool:缓存线程池
  2. FixedThreadPool:固定容量线程池
  3. SingleThreadPool:单线程线程池
  4. ScheduledThreadPool:周期或定时执行任务的线程池

这些线程池的特性和优缺点如下表所示:

从上表可以看出,对于Executors提供的模版函数构建的线程池而言,由于其等待队列或者最大线程数为Integer.MAX_VALUE,使得其均有OOM异常的风险,故在使用时,应考虑详尽,规避大量任务或线程的创建,如果遇到相关异常,建议使用ThreadPoolExecutor自行实现线程池,限制线程池的线程或任务数量,以避免OOM异常。

04-27 07:56