JDK內建執行緒池的共同點和區別

minororange發表於2021-11-17

構造器

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 協議》,轉載必須註明作者和本文連結

相關文章