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

构造器#

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 时间,再决定是否返回任务
本作品采用《CC 协议》,转载必须注明作者和本文链接