Java多线程面试准备:聊聊Executor框架
點擊上方“好好學java”,選擇“置頂公眾號”
優秀學習資源、干貨第一時間送達!
?精彩內容?
java實戰練習項目教程
2018微服務資源springboot、springcloud、docker、dubbo實戰等傾心分享
2018年java架構師全套學習教程
最新大數據培訓完整視頻教程
2018年java最新全套培訓學習教程
Executor框架的兩級調度模型
在HotSpot VM的線程模型中,Java線程被一對一映射為本地操作系統線程。Java線程啟動時會創建一個本地操作系統線程;當Java線程終止時,這個操作系統線程也會被回收。操作系統會調用所有線程并將他們分配給可用的CPU。
可以將此種模式分為兩層,在上層,Java多線程程序通常把應用程序分解為若干任務,然后使用用戶級的調度器(Executor框架)將這些任務映射為固定數量的線程;在底層,操作系統內核將這些線程映射到硬件處理器上。
兩級調度模型的示意圖:
imageExecutor框架的結構
Executor框架主要由3大部分組成:
任務: 包括被執行的任務需要實現的接口:Runable 接口、Callable接口;
任務的執行: 包括任務執行機制的核心接口Executor,以及繼承自Executor的ExecutorService接口。Executor框架有兩個關鍵類實現了ExecutorService接口:ThreadPoolExecutor 和 ScheduledThreadPoolExecutor、ForkJoinPool;
任務的異步計算結果: 包括Future接口和實現Future接口的FutureTask類、ForkJoinTask類。
框架的類與接口:
image注意一下: 此圖不完整,Executor框架的成員還包括: CompletionService、ExecutorCompletionService 、ForkJoinTask、ForkJoinPool;
Executor框架的成員介紹
1、Runnable接口 和 Callable接口
Runnable接口和Callable接口的實現類,都可以被ThreadPoolExecutor或Scheduled-
ThreadPoolExecutor執行。它們之間的區別是Runnable不會返回結果,而Callable可以返回結
果。
除了可以自己創建實現Callable接口的對象外,還可以使用工廠類Executors來把一個
Runnable包裝成一個Callable。
2、Executor、ExecutorService、AbstractExecutorService、ScheduledExecutorService
Executor 接口: 是Executor框架的基礎,它將任務的提交與任務的執行分離開來。
ExecutorService 接口: 擴展了Executor接口,提供了管理終止的方法(shutdown( ) ,etc),以及可為跟蹤一個或多個異步任務執行狀況而生成 Future 的方法。
AbstractExecutorService 類: 提供 ExecutorService 執行方法的默認實現。
ScheduledExecutorService 接口: 一個特殊的 ExecutorService,提供了 可安排在給定的延遲后運行或定期執行的命令。
3、ThreadPoolExecutor
ThreadPoolExecutor通常使用工廠類Executors來創建。Executors可以創建3種類型的ThreadPoolExecutor:SingleThreadExecutor、FixedThreadPool和CachedThreadPool。
以下是這三種線程池的應用場景說明:
FixedThreadPool適用于為了滿足資源管理的需求,而需要限制當前線程數量的應用場
景,它適用于負載比較重的服務器。SingleThreadExecutor適用于需要保證順序地執行各個任務;并且在任意時間點,不會有多
個線程是活動的應用場景。CachedThreadPool是大小無界的線程池,適用于執行很多的短期異步任務的小程序,或者
是負載較輕的服務器4、ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor通常使用工廠類Executors來創建。Executors可以創建2種類
? ?型的ScheduledThreadPoolExecutor,如下。
ScheduledThreadPoolExecutor:包含若干個線程的ScheduledThreadPoolExecutor。
SingleThreadScheduledExecutor:只包含一個線程的ScheduledThreadPoolExecutor。
5、Future 接口
Future接口和實現Future接口的FutureTask類用來表示異步計算的結果。當我們把Runnable
接口或Callable接口的實現類提交(submit)給ThreadPoolExecutor或
ScheduledThreadPoolExecutor時,ThreadPoolExecutor或ScheduledThreadPoolExecutor會向我們
返回一個FutureTask對象。下面是對應的API。
有一點需要讀者注意,到目前最新的JDK 8為止,Java通過上述API返回的是一個
FutureTask對象。但從API可以看到,Java僅僅保證返回的是一個實現了Future接口的對象。在將
來的JDK實現中,返回的可能不一定是FutureTask
推薦閱讀
1.?每日都見到的springboot日志
2.?springmvc入門
3.?servlet就是這么簡單
4.?重溫javaweb過濾器filter
附上熱門QQ群,存放資源和歷史資料,2000容量(低門檻付費群),長按二維碼入群
總結
以上是生活随笔為你收集整理的Java多线程面试准备:聊聊Executor框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java大公司后端多线程面试题最强分享
- 下一篇: Java面试2018常考题目汇总