java executor_Java并發編程(08):Executor線程池框架

b18e784ce4a1311293bb8c2c90628fbe.png

一、Executor框架簡介

1、基礎簡介

Executor系統中,將線程任務提交和任務執行進行了解耦的設計,Executor有各種功能強大的實現類,提供便捷方式來提交任務并且獲取任務執行結果,封裝了任務執行的過程,不再需要Thread().start()方式,顯式創建線程并關聯執行任務。

2、調度模型

線程被一對一映射為服務所在操作系統線程,啟動時會創建一個操作系統線程;當該線程終止時,這個操作系統線程也會被回收。

27f084e9b9bb30dc78eee897279e73ba.png

3、核心API結構

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

562b46d638513263d755a91b9fb6c993.png

線程池任務:核心接口:Runnable、Callable接口和接口實現類;

任務的結果:接口Future和實現類FutureTask;

任務的執行:核心接口Executor和ExecutorService接口。在Executor框架中有兩個核心類實現了ExecutorService接口,ThreadPoolExecutor和ScheduledThreadPoolExecutor。

二、用法案例

1、API基礎

ThreadPoolExecutor基礎構造

public 

5ea3b952f3cf0d7344522a21911d933c.png

2、初始化方法

ExecutorService 

通常情況下,線程池不允許使用Executors去創建,而是通過ThreadPoolExecutor的方式,這樣的處理方式更加明確線程池的運行規則,規避資源耗盡的風險。

3、基礎案例

package 

流程分析

  • 線程池中線程數小于corePoolSize時,新任務將創建一個新線程執行任務,不論此時線程池中存在空閑線程;
  • 線程池中線程數達到corePoolSize時,新任務將被放入workQueue中,等待線程池中任務調度執行;
  • 當workQueue已滿,且maximumPoolSize>corePoolSize時,新任務會創建新線程執行任務;
  • 當workQueue已滿,且提交任務數超過maximumPoolSize,任務由RejectedExecutionHandler處理;
  • 當線程池中線程數超過corePoolSize,且超過這部分的空閑時間達到keepAliveTime時,回收該線程;
  • 如果設置allowCoreThreadTimeOut(true)時,線程池中corePoolSize范圍內的線程空閑時間達到keepAliveTime也將回收;

三、線程池應用

應用場景:批量賬戶和密碼的校驗任務,在實際的業務中算比較常見的,通過初始化線程池,把任務提交執行,最后拿到處理結果,這就是線程池使用的核心思想:節省資源提升效率。

public 

線程池主要用來解決線程生命周期開銷問題和資源不足問題,通過線程池對多個任務線程重復使用,線程創建也被分攤到多個任務上,多數任務提交就有空閑的線程可以使用,所以消除線程頻繁創建帶來的開銷。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Exchange 2007遷移Exchange 2010應該注意的13件事

1. Exchange 2007可以支持升級到Exchange 2010,但需要提前將Exchange 2007所有服務器環境升級至 SP2或以上版本。2. Exchange 2007如果更新至SP2或以上版本,則建議按照以下順序進行各角色的更新: CAS、UM、HUB、Edge、Mailbox。3. …

dom4j操作XML

(一)創建Document的基本操作 /** * XML基本操作 */ public void BaseOperation(){ //創建一個document Document documentDocumentHelper.createDocument(); //創建根結點 Element rootdocument.addElement("root"); //為根結點添加一個book節點 Element …

Oracle數據庫中閃回恢復的詳細分析

Oracle9i開始提供閃回查詢,以便能在需要的時候查到過去某個時刻的一致性數據,這是通過Undo實現的。這個功能有很大的限制,就是相關事務的undo不能被覆蓋,否則就無力回天了。oracle10g大大的增強了閃回查詢的功能,并且提…

python 查看當前目錄_「Python」打包分發工具setuptools學習

?setuptools是python標準的打包分發工具,它可以將我們編寫的python項目打包安裝,這樣其他同事就可以像調用標準庫或python第三方庫那樣直接使用;也可以將項目上傳到Pypi供更多人的下載安裝使用。?1. 項目結構項目結構?這是一個打包構建好的…

如何殺掉D狀態的進程?[zt]【轉】

轉自:http://blog.csdn.net/chinalinuxzend/article/details/4288791 [-] 如何殺掉D狀態的進程zt相關博文原貼:http://www.xclinux.cn/?p752 如何殺掉D狀態的進程?[zt] 狀態為 D (Uninterruptible sleep) ,以及狀態為 Z (Zombie)這些垃圾進程…

九月十月百度人搜,阿里巴巴,騰訊華為筆試面試八十題(第331-410題)

九月十月百度人搜,阿里巴巴,騰訊華為小米搜狗筆試面試八十題 (參與算法&面試題交流與討論,請加群:30382647)引言 自發表上一篇文章至今(事實上,上篇文章更新了近3個月之久&#…

mysql性能結構優化原理_MySQL性能管理及架構設計(二):數據庫結構優化、高可用架構設計、數據庫索引優化...

一、數據庫結構優化(非常重要)1.1 數據庫結構優化目的1、減少數據冗余:(數據冗余是指在數據庫中存在相同的數據,或者某些數據可以由其他數據計算得到),注意,盡量減少不代表完全避免數據冗余;2、盡量避免數據維護中出現…

python git是什么_python爬蟲之git的使用

一、簡單認識: 1、初始化文件夾為版本控制文件夾,首先建立一個文件夾,進入這個文件夾以后輸入git init初始化這個文件夾。2、Git幾種位置概念 1、本地代碼:本地更改完代碼以后,雖然是存放在git的文件夾里面&#xff0c…

產品經理網站數據分析之測量問題現狀(二)

本章續接上文,主要講解流程圖的繪制要領,以及示例。 1、基礎流程圖 基礎流程圖應該簡明扼要地描述出流程的主要結構,在弄清楚流程的起點、終點,以及主要步驟后,按照流程的先后順序,按照要展示的流程長短比例…

鍵盤流的逆襲- Idea 中使用 VIM mode 提高生成效率

Idea 中使用 VIM mode 提高生成效率 安裝配置 Idea 的 vim 插件 先挖坑,后續再填。這個毫無技術含量,不寫了,自己去搜吧。 快捷鍵代替鼠標 打開文件 按兩下 shift 鍵 > 輸入類目文件名按 command e ,打開最近編輯的文件列表&a…

git 撤銷掛起的更改_Timer計時任務因系統時間的修改導致掛起解決方案

之前開發的一款運行在定制Android設備上的一個實時監控程序發生了一個很奇怪的問題:關機狀態下放置了半個月左右的時間之后,再次開機使用,使用到一半的時候,顯示界面就卡死在某一個狀態下了(顯示界面只顯示一行文字,代…

yii urlmanager配置post不生效_一文帶你徹底學會 Git Hooks 配置

你好,我是小桔,是一個沒有感情的代碼崽。今天給大家介紹一下 Git Hooks,相信 Git 大家都在用吧,Git 除了用作版本控制,還有許多高級功能,Git Hooks 就是其中之一。本文環境:Git 版本&#xff1a…

Tiff – 值得你體驗一下的可視化的字體對比工具

Tiff 是一款字體對比工具,可視化對比兩種字體之間的差異。這是一個工具來幫助比較兩種字體,同時學習排版。在這一點上,谷歌 Web 字體作為 Tiff 外部字體文件的唯一來源。由于應用程序使用的一些功能需要 HTML5 和 CSS3 支持,因此請…

[.NET] 建構子中傳遞子對象的對象

在設計對象繼承的時候&#xff0c;父對象建構子會需要一些參數&#xff0c;這些參數可以由子對象建構子透過base關鍵詞來提供。 namespace Test001 {public class ParentClass{// Constructorspublic ParentClass(IEnumerable<string> dataCollection){this.DataCollecti…

php基礎教程(三):變量

1、php變量規則 變量以 $ 符號開頭&#xff0c;其后是變量的名稱變量名稱必須以字母或下劃線開頭變量名稱不能以數字開頭變量名稱只能包含字母數字字符和下劃線&#xff08;A-z、0-9 以及 _&#xff09;變量名稱對大小寫敏感&#xff08;$y 與 $Y 是兩個不同的變量&#xff09;…

操作系統實驗文件管理_系統設計硬核知識(5)——操作系統的文件管理

操作系統對計算機的管理包括兩個方面&#xff1a;硬件資源和軟件資源。硬件資源的管理包括CPU 的管理、存儲器的管理、設備管理等&#xff0c;主要解決硬件資源的有效和合理利用問題。軟件資源包括各種系統程序、各種應用程序、各種用戶程序&#xff0c;也包括大量的文檔材料、…

錯誤 0xc0202049: 數據流任務 1: 無法在只讀列“ID”中插入數據

數據庫導入導出時總失敗&#xff0c;錯誤信息如下&#xff1a; 正在驗證 (錯誤) 消息錯誤 0xc0202049: 數據流任務 1: 無法在只讀列“ID”中插入數據。 (SQL Server 導入和導出向導) 錯誤 0xc0202045: 數據流任務 1: 驗證列元數據失敗。 (SQL Server 導入和導出向導) 錯誤 0xc0…

python中的items方法_Python 字典的items()方法和iteritems()方法有什么不同?【面試題詳解】...

今天愛分享給大家帶來Python 字典的items()方法和iteritems()方法有什么不同?【面試題詳解】&#xff0c;希望能夠幫助到大家。 字典是 Python 語言中唯一的映射類型。映射類型對象里哈希鍵(鍵&#xff0c;key)和指向的對象&#xff08;值&#xff0c;value)是多對一的關系&am…

大網高級技術筆記(一)

防偽碼&#xff1b;黑發不知勤學早&#xff0c;白首方悔讀書遲本章目標&#xff1a;理解消化動態路由協議與OSPF協議并應用于實際工作中。第一章 動態路由協議一、按照路由執行的算法分類距離矢量路由協議&#xff1a;RIP、IGRP鏈路狀態路由協議&#xff1a;OSPE、IS-IS二、RIP…

容器類基礎篇(一)

容器類&#xff1a;用來解決數組具有固定尺寸而使得靈活性受限的問題。基本的容器類&#xff08;集合類&#xff09;有&#xff1a;List、Set、Queue、Map。 Java容器類類庫的用途是用來“保存對象”&#xff0c;這分為兩個不同的大類&#xff1a; 1.Collection&#xff08;集合…