小夥子,你懂執行緒池的建立嗎?
阿新 • • 發佈:2020-07-12
> 為什麼阿里巴巴要禁用Executors建立執行緒池?看阿里巴巴開發手冊併發程式設計這塊有一條:執行緒池不允許使用Executors去建立,而是通過ThreadPoolExecutor的方式,通過原始碼分析禁用的原因
#### 一、執行緒池的定義
管理一組工作執行緒。通過執行緒池複用執行緒有以下幾點優點:
- 減少資源建立 => 減少記憶體開銷,建立執行緒佔用記憶體
- 降低系統開銷 => 建立執行緒需要時間,會延遲處理的請求
- 提高穩定穩定性 => 避免無限建立執行緒引起的`OutOfMemoryError`【簡稱OOM】
#### 二、 Executors建立執行緒池的方式
根據返回的物件型別建立執行緒池可以分為三類:
- 建立返回ThreadPoolExecutor物件
- 建立返回ScheduleThreadPoolExecutor物件
- 建立返回ForkJoinPool物件
#### 三、ThreadPoolExecutor物件
因為這些建立執行緒池的靜態方法都是返回`ThreadPoolExecutor`物件,和我們手動建立`ThreadPoolExecutor`物件的區別就是我們不需要自己傳建構函式的引數。`ThreadPoolExecutor`的建構函式共有四個,但最終呼叫的都是同一個:
```java
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
Block