奈學:Executor框架的概述
JDK1.5之前,我們如果想要使用Java執行緒來完成相關任務,一般涉及兩個類,一個是Thread類,一個Thread物件在啟動(start)之後會建立一個關聯的本地作業系統執行緒,隨後會自動回撥run方法。另一個是Runnable介面,可以看作 run方法的抽象,代表執行緒任務。透過Runnable和Thread的配合可以編寫我們自己的多執行緒邏輯。
可以看到,此時Java對於多執行緒程式設計的支援還是比較原始的,功能也並不多。因此,在JDK1.5的JUC包中,對Java的多執行緒應用做了一次全面的擴充套件,比如新lock鎖、併發容器等,還有一個重要的擴充套件就是出現了Executor執行框架。
Executor執行框架將Java執行緒的應用做了更細緻的功能劃分,並且進行了功能的增強,大概包括三個部分:
執行緒任務
JDK1.5之前,只有Runnable代表執行緒任務,對於受檢異常,必須手動在try catch中處理,不支援throws宣告可能丟擲的異常,不支援任務返回值。
JDK1.5的時候,出現了Callable介面,可以看作Runnable的增強:對於受檢異常,可以不用在try catch中處理,支援throws宣告可能丟擲的異常,並且支援任務返回值。
執行器
JDK1.5之前,執行緒任務的執行需要我們手動建立Thread物件、傳入任務、並呼叫start方法,一個任務對應一個執行緒,它們之間的關聯非常緊密,這樣對於執行緒任務的管理、執行緒資源的複用等功能幾乎沒有,或者只能自己手動實現,非常麻煩。
JDK1.5的時候,出現了Executor執行緒池。執行緒池作為任務執行器,我們只需要建立指定的執行緒池,隨後將執行緒任務傳入執行緒池中,由執行緒池來確定是將任務直接分配給池中的執行緒去執行、還是建立執行緒並執行、或者是加入任務佇列等待等等邏輯,使用執行緒池之後我們不再需要手動建立執行緒去執行,並且可以實現執行緒的複用以及執行緒任務的管理等強大的功能。執行器(執行緒池)將任務與執行緒解耦!
非同步執行結果
JDK1.5之前,線上程任務啟動之後,對於執行緒任務監控幾乎沒有,我們不知道任務有沒有完成,也沒辦法定義任務的返回值等一系列資訊。
JDK1.5的時候,出現了Future介面以及它的各種實現。這個介面體系代表了執行緒任務非同步計算的結果,通常與Callable執行緒任務連用。利用了Future設計模式,在一個執行緒A執行執行緒任務的時候,我麼可以在另一個執行緒B中非同步的透過Future的實現的相關方法完成判斷對應執行緒任務是否執行完畢、是否被取消、手動取消正在執行的執行緒任務、以及從執行完畢的執行緒任務中獲取返回值等功能。
有了執行框架,我們只需建立執行緒任務、然後交給指定的執行緒池去執行,執行完畢之後等待獲取返回結果即可,不再需要關注執行緒的建立、開啟、執行、回收等基礎性的中間工作,將任務與執行緒解耦,程式設計師更加的關注執行緒任務本身(這裡是和業務相關的),有利於多執行緒程式的開發!
如果想要使用執行框架,只需要看相關api文件即可!那麼我們有必要深入理解執行框架嗎?當然時間充足的情況下是有必要的,只有我們知道了執行框架的原理之後,才能更好的使用它。執行框架屬於JDK自帶的基礎框架,經歷了時間和眾多Java開發者的考驗,不求能夠手寫,僅僅學習它的設計精華,包括各種設計模式,同時避開隱藏的坑,對於程式設計師個人的後續職業發展也是具有很大幫助的!
執行緒任務、執行器、執行結果這三部分,都可以圍繞著Executor執行緒池展開,因此下面我們將從Executor入手,並且會穿插介紹Callable和Future的相關原理。
本文來源於:奈學開發者社群,如有侵權,請聯絡我刪除~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976011/viewspace-2712732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 奈學:Executor執行緒池的概述執行緒
- 執行緒池和Executor框架執行緒框架
- Java 併發程式設計 Executor 框架Java程式設計框架
- 《java併發程式設計的藝術》Executor框架Java程式設計框架
- Java多執行緒學習(八)執行緒池與Executor 框架Java執行緒框架
- [轉載] 快速學習-Mybatis框架概述MyBatis框架
- J.U.C之Executor框架入門指引框架
- Spring5的框架概述Spring框架
- 併發07--執行緒池及Executor框架執行緒框架
- 從淺入深掌握併發執行框架Executor框架
- 聊聊jdk httpclient的executorJDKHTTPclient
- SSM框架學習筆記_第1章_SpringIOC概述SSM框架筆記Spring
- 集合框架體系概述框架
- 奈飛經濟學
- NIO的組成有哪些——奈學
- 圖片下載框架概述框架
- 前端框架擼起來——概述前端框架
- 「Spring認證」Spring 框架概述Spring框架
- Java多執行緒之Executor框架和手寫簡易的執行緒池Java執行緒框架
- Spark設定executor-memory後,executor顯示的記憶體不符問題Spark記憶體
- [case39]聊聊jdk httpclient的executorJDKHTTPclient
- 帶你學會區分Scheduled Thread Pool Executor 與Timerthread
- 執行緒池 Executor執行緒
- 奈學:reaseShared共享式釋放鎖
- Linux 學習概述Linux
- 再學Blazor——概述Blazor
- 開始SpringBoot的學習&springboot概述Spring Boot
- hadoop學習-HDFS的詳細概述Hadoop
- 奈學:資料湖有哪些缺點?
- 奈學教你五分鐘學會分散式事務分散式
- SpringMVC 框架系列之元件概述與配置詳解SpringMVC框架元件
- 奈學:Java 和 JavaScript 是什麼關係?JavaScript
- 奈飛使用機器學習建立媒體機器學習
- 奈學p7雲原生架構師架構
- 自監督學習概述
- DKhadoop大資料平臺基礎框架方案概述Hadoop大資料框架
- 機器學習的文字摘要方法概述 - kdnuggets機器學習
- 奈學教育:Hadoop原始碼編譯全流程分享Hadoop原始碼編譯