电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java并發線程之線程池的知識總結

瀏覽:3日期:2022-08-17 16:01:47

初始化線程池后,把任務丟進去,等待調度就可以了,使用起來比較方便。JAVA中Thread是線程類,不建議直接使用Thread執行任務,在并發數量比較多的情況下,每個線程都是執行一個很短的時間就任務結束了,這樣頻繁創建線程會大大降低系統的效率,因為頻繁的創建和銷毀線程需要時間。而線程池可以復用,就是執行完一個任務,并不銷毀,而是可以繼續執行其它任務。

Thread的弊端 每次new Thread() 創建對象,性能差。 線程缺乏統一管理,可能無限制創建線程,相互競爭,有可能占用過多系統資源導致死機或OOM。 不能多執行,定期執行,線程中斷 線程池的優點 重用存在的線程,減少對象創建,消亡的開銷,性能佳,降低資源消耗。 可以控制最大并發線程數,提高系統資源利用率,同時避免過多資源競爭,避免阻塞,提高響應速度。 提供定時執行,定期執行,單線程,并發數控制等功能,以提高線程的可管理性。

阿里發布的 Java 開發手冊中強制線程池不允許使用 Executors 去創建,而是通過 ThreadPoolExecutor 的方式,這樣的處理方式讓寫的同學更加明確線程池的運行規則,規避資源耗盡的風險。Executors利用工廠模式向我們提供了4種線程池實現方式,但是并不推薦使用,原因是使用Executors創建線程池不會傳入相關參數而使用默認值所以我們常常忽略了那些重要的參數(線程池大小、緩沖隊列的類型等),而且默認使用的參數會導致資源浪費,不可取。

ThreadPoolExecutor介紹構造函數和參數

Java并發線程之線程池的知識總結

java.uitl.concurrent.ThreadPoolExecutor類是線程池中最核心的一個類。

public class ThreadPoolExecutor extends AbstractExecutorService { /** 構造函數 1 */ public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {} /** 構造函數 2 */ public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory) {} /** 構造函數 3 */ public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,RejectedExecutionHandler handler) {} /** 構造函數 4 */ public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {}}

ThreadPoolExecutor類中提供了四個構造方法,在構造函數4中,參數最多,通過觀察其他3個構造函數,發現前面三個構造器都是調用的第四個構造器進行的初始化工作。

Java并發線程之線程池的知識總結

構造器中各個參數的含義

corePoolSize 核心線程池的大小,在創建了線程池后,默認情況下,線程池中沒有任何的線程池,而是等任務過來了再去創建線程執行任務。除非調用了預創建線程的方法,即在沒有任務到來之前就創建corePoolSize個線程或者一個線程。當線程池中的線程數量到達corePoolSize后,就會把到達的任務放到緩存隊列里面。

prestartCoreThread() : 預創建一個核心線程,使其閑置等待工作。 prestartAllCoreThreads() : 啟動所有核心線程,導致它們空閑地等待工作。

maxnumPoolSize 線程池中最大的線程數,是一個非常重要的參數,它表示在線程池中最多能創建多少線程。keepAliveTime 表示線程在沒有任務執行時最多保持多久時間會終止。默認情況下,只有當線程池中的線程數大于corePoolSize時,keepAliveTime才會起作用,即當線程池中的線程數大于corePoolSize,如果一個線程的空閑時間達到keepAliveTime,則會終止直到線程池中的線程數量不大于corePoolSize。但是如果調用了allowCoreThreadTimeOut(boolean)方法,在線程池中線程數不大于corePoolSize時,keepAliveTime參數也會啟作用,直到線程池中的線程數為0。

unit 參數keepAliveTime的時間單位,有7種取值,在TimeUnit類中有7種靜態屬性。

TimeUnit.DAYS : 以 天 為單位 ; TimeUnit.HOURS : 以 小時 為單位 ; TimeUnit.MINUTES : 以 分鐘 為單位 ; TimeUnit.SECONDS : 以 秒 為單位 ; TimeUnit.MILLISECONDS : 以 毫秒 為單位 ; TimeUnit.MICROSECONDS : 以 微秒 為單位 ; TimeUnit.NANOSECONDS : 以 納秒 為單位 ;

workQueue一個阻塞隊列,用來存儲等待執行的任務,這個參數的選擇也很重要,會對線程池的運行過程產生重大影響,一般有以下幾種選擇。

ArrayBlockingQueue:基于數組的先進先出隊列,創建時必須指定大小。 LinkedBlockingQueue:基于鏈表的先進先出隊列,若果創建時沒有指定此隊列的大小,則默認為Integer.MAX_VALUE。 SynchronousQueue:這個隊列比較特殊,它不會保存提交的任務,而是直接新建一個線程來執行新的任務。

threadFactory線程工廠,主要用來創建線程。線程池最重要的一項工作,就是在滿足某些條件情況下創建線程。在ThreadPoolExecutor線程池中,創建線程的操作時交給ThreadFactoty來完成。使用線程池,就必須要指定threadFactory。如果我們的構造器中沒有指定使用ThreadFactory,這個時候ThreadPoolExecutor就會使用默認的ThreadFactory:DefaultThreadFactoryhandler 在ThreadPoolExecutor線程池中還有一個重要的接口:RejectedExecutionHandler。當提交給線程池的某一個新任務無法直接被線程池中“核心線程”直接處理,又無法加入等待隊列,也無法創建新的線程執行;又或者線程池已經調用shutdown()方法停止了工作;又或者線程池不是處于正常的工作狀態;這時候ThreadPoolExecutor線程池會拒絕處理這個任務,觸發創建ThreadPoolExecutor線程池時定義的RejectedExecutionHandler接口的實現,表示當拒絕處理任務時的策略,有以下四種取值,四種值都為其靜態內部類:

ThreadPoolExecutor.AbortPolicy:丟棄任務并拋出RejectedExecutionException異常 ThreadPoolExecutor.DiscardPolicy:也是丟棄任務,但是不拋出異常。 ThreadPoolExecutor.DiscardOldestPolicy:丟棄隊列最前面的任務,然后重新嘗試執行新提交的任務。 ThreadPoolExecutor執行execute方法分下面4種情況 如果當前運行的線程少于corePoolSize,則創建新的線程來執行任務(執行這一步驟需要獲取全局鎖) 如果運行的線程等于或者多于corePoolSize,則將任務加入到BlockingQueue 如果無法將任務加入BlockingQueue(隊列已滿),則創建新的線程來處理任務(執行這一步驟需要獲取全局鎖) 如果創建新線程將當前運行的線程超出maxnumPoolSize,任務被拒絕,并調用RejectedExecutionHandler.rejectedExecution()方法。

以上就是Java并發線程之線程池的知識總結的詳細內容,更多關于Java 線程池的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 河北码上网络科技|邯郸小程序开发|邯郸微信开发|邯郸网站建设 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 铝镁锰板厂家_进口钛锌板_铝镁锰波浪板_铝镁锰墙面板_铝镁锰屋面-杭州军晟金属建筑材料 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 焦作网 WWW.JZRB.COM| 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 振动筛,震动筛,圆形振动筛,振动筛价格,振动筛厂家-新乡巨宝机电 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | AGV叉车|无人叉车|AGV智能叉车|AGV搬运车-江西丹巴赫机器人股份有限公司 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 真空乳化机-灌装封尾机-首页-温州精灌 | 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 上海宿田自动化设备有限公司-双面/平面/单面贴标机 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | 九爱图纸|机械CAD图纸下载交流中心 | 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 鲁网 - 山东省重点新闻网站,山东第一财经门户 |