
一、Executor框架簡介
1、基礎簡介
Executor系統中,將線程任務提交和任務執行進行了解耦的設計,Executor有各種功能強大的實現類,提供便捷方式來提交任務并且獲取任務執行結果,封裝了任務執行的過程,不再需要Thread().start()方式,顯式創建線程并關聯執行任務。
2、調度模型
線程被一對一映射為服務所在操作系統線程,啟動時會創建一個操作系統線程;當該線程終止時,這個操作系統線程也會被回收。

3、核心API結構
Executor框架包含的核心接口和主要的實現類如下圖所示:

線程池任務:核心接口:Runnable、Callable接口和接口實現類;
任務的結果:接口Future和實現類FutureTask;
任務的執行:核心接口Executor和ExecutorService接口。在Executor框架中有兩個核心類實現了ExecutorService接口,ThreadPoolExecutor和ScheduledThreadPoolExecutor。
二、用法案例
1、API基礎
ThreadPoolExecutor基礎構造
public

2、初始化方法
ExecutorService
通常情況下,線程池不允許使用Executors去創建,而是通過ThreadPoolExecutor的方式,這樣的處理方式更加明確線程池的運行規則,規避資源耗盡的風險。
3、基礎案例
package
流程分析
- 線程池中線程數小于corePoolSize時,新任務將創建一個新線程執行任務,不論此時線程池中存在空閑線程;
- 線程池中線程數達到corePoolSize時,新任務將被放入workQueue中,等待線程池中任務調度執行;
- 當workQueue已滿,且maximumPoolSize>corePoolSize時,新任務會創建新線程執行任務;
- 當workQueue已滿,且提交任務數超過maximumPoolSize,任務由RejectedExecutionHandler處理;
- 當線程池中線程數超過corePoolSize,且超過這部分的空閑時間達到keepAliveTime時,回收該線程;
- 如果設置allowCoreThreadTimeOut(true)時,線程池中corePoolSize范圍內的線程空閑時間達到keepAliveTime也將回收;
三、線程池應用
應用場景:批量賬戶和密碼的校驗任務,在實際的業務中算比較常見的,通過初始化線程池,把任務提交執行,最后拿到處理結果,這就是線程池使用的核心思想:節省資源提升效率。
public
線程池主要用來解決線程生命周期開銷問題和資源不足問題,通過線程池對多個任務線程重復使用,線程創建也被分攤到多個任務上,多數任務提交就有空閑的線程可以使用,所以消除線程頻繁創建帶來的開銷。