JDK内置线程池的共同点和区别

Java
287
0
0
2022-07-23
标签   Java多线程

构造器

newFixedThreadPool

  1. 核心线程数 = 最大线程数,核心线程数可以指定
  2. 无超时时间
  3. 使用 LinkedBlockingQueue

newSingleThreadExecutor

  1. 核心线程数 = 最大线程数 = 1
  2. 无超时时间
  3. 使用 LinkedBlockingQueue

newCachedThreadPool

  1. 核心线程数为 0,最大线程数为 Integer 的最大值
  2. 超时时间为 60s
  3. 使用 SynchronousQueue

newScheduledThreadPool

  1. 核心线程数可以指定,最大线程数为 Integer 最大值
  2. 无超时时间
  3. 使用 DelayedWorkQueue

任务队列

LinkedBlockingQueue

队列空间上限为 Integer 最大值,配合固定线程数的线程池使用

SynchronousQueue

队列空间为 0,每个 take 操作都需要一个 put 操作,配合线程数无上限(实际上限为 Integer 最大值)的线程池使用

DelayedWorkQueue

  1. 队列空间会自动扩容
  2. 新增任务时会根据 delay 时间排序
  3. 取出任务时会先取到队列第一个任务,然后判断 delay 时间,再决定是否返回任务