Executors 工廠類提供四種常用線程池,底層皆為 ThreadPoolExecutor,參數組合不同:
| 線程池類型 | 核心/最大線程數 | 隊列類型 | 適用場景 |
|---|---|---|---|
newFixedThreadPool(n) | n / n | LinkedBlockingQueue(無界) | 穩定固定併發、長期運行任務、伺服器端 |
newCachedThreadPool() | 0 / Integer.MAX_VALUE | SynchronousQueue(直接移交) | 短生命周期、異步任務、任務量波動大 |
newSingleThreadExecutor() | 1 / 1 | LinkedBlockingQueue(無界) | 需序列化執行、單線程串行化 |
newScheduledThreadPool(n) | n / n | DelayedWorkQueue | 定時、周期性任務 |
public ThreadPoolExecutor(
int corePoolSize, // 核心線程數
int maximumPoolSize, // 最大線程數
long keepAliveTime, // 非核心線程閒置存活時間
TimeUnit unit, // 時間單位
BlockingQueue<Runnable> workQueue, // 任務隊列
ThreadFactory threadFactory, // 線程工廠
RejectedExecutionHandler handler // 拒絕策略
)
workQueue。RejectedExecutionException。// CPU 密集型:核心數 = CPU 核心數 + 1
// IO 密集型:核心數 = CPU 核心數 * (1 + 平均等待時間/平均工作時間)
ThreadPoolExecutor executor = new ThreadPoolExecutor(
4, 8, 60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100),
new ThreadFactoryBuilder().setNameFormat("biz-worker-%d").build(),
new ThreadPoolExecutor.CallerRunsPolicy() // 推薦:背壓保護
);
理解線程池參數交互關係與拒絕策略,避免盲目使用 Executors 預設池(無界隊列易導致 OOM),根據業務屬性(CPU/IO 密集)合理配置核心數、隊列大小與拒絕策略,構建穩健的併發系統。