六、執行緒池(一)
阿新 • • 發佈:2020-06-19
### 執行緒池
通過建立池可以有效的利用系統資源,節約系統性能。Java 中的執行緒池就是一種非常好的實現,從 JDK1.5 開始 Java 提供了一個執行緒工廠 Executors 用來生成執行緒池,通過 Executors 可以方便的生成不同型別的執行緒池。
### 執行緒池的優點
- 降低資源消耗。執行緒的開啟和銷燬會消耗資源,通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。
- 提高響應速度。當任務到達時,任務可以不需要的等到執行緒建立就能立即執行。
- 提高執行緒的可管理性。執行緒是稀缺資源,如果無限制的建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一的分配,調優和監控。
### 常見的執行緒池
- CachedThreadPool:可快取的執行緒池,該執行緒池中沒有核心執行緒,非核心執行緒的數量為 Integer.max_value,就是無限大,當有需要時建立執行緒來執行任務,沒有需要時回收執行緒,適用於耗時少,任務量大的情況。
- SecudleThreadPool:週期性執行任務的執行緒池,按照某種特定的計劃執行執行緒中的任務,有核心執行緒,但也有非核心執行緒,非核心執行緒的大小也為無限大。適用於執行週期性的任務。
- SingleThreadPool:只有一條執行緒來執行任務,適用於有順序的任務的應用場景。
- FixedThreadPool:定長的執行緒池,有核心執行緒,核心執行緒的即為最大的執行緒數量,沒有非核心執行緒
- Executors.newFixedThreadPool()、Executors.newSingleThreadExecutor() 和 Executors.newCachedThreadPool() 等方法的底層都是通過 ThreadPoolExecutor 實現的。
### ThreadPoolExecutor
````java
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
Block