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

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

java 優雅關閉線程池的方案

瀏覽:80日期:2022-08-20 16:04:43

我們經常在項目中使用的線程池,但是是否關心過線程池的關閉呢,可能很多時候直接再項目中直接創建線程池讓它一直運行當任務執行結束不在需要了也不去關閉,這其實是存在非常大的風險的,大量的線程常駐在后臺對系統資源的占用是巨大的 ,甚至引發異常。所以在我們平時使用線程池時需要注意優雅的關閉,這樣可以保證資源的管控。

在 Java 中和關閉線程池相關的方法主要有如下:

void shutdown() List<Runnable> shutDownNow boolean awaitTermination boolean isShutDown boolean isTerminated

對于這些方法有著不同的使用和作用,下面我們真的會這些不同的方法做詳細的介紹。

ShutDown

shutDown 方法從字面意思我們可以看到是停止關閉的意思,我們先來看下面的一段代碼,首先我們通過 ThreadPoolExecutor 來創建一個容量是10的無界線程池,與 FixedThreadPool 類似的,這里手動創建可以更好地理解線程池的創建。在后我們提交一千個任務執行,再執行 shutdown 方法進行暫停。

public static void main(String[] args) throws InterruptedException { ExecutorService service = new ThreadPoolExecutor(10,10,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>()); for (int i = 0; i < 1000; i++) { service.submit(() ->{try { TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) { System.out.println('接受中斷,不處理~~');}System.out.println('args = ' + Arrays.deepToString(args)+ Thread.currentThread().getName()); }); } service.shutdown(); } 我們可以看到結果所以線程會正常執行結束后再關閉線程池,對于 ShutDown 而言它可以安全的停止一個線程池,它有幾個關鍵點 ShutDown 會首先將線程設置成 SHUTDOWN 狀態,然后中斷所有沒有正在運行的線程 正在執行的線程和已經在隊列中的線程并不會被中斷,說白了就是使用shutDown 方法其實就是要等待所有任務正常全部結束以后才會關閉線程池 調用 shutdown() 方法后如果還有新的任務被提交,線程池則會根據拒絕策略直接拒絕后續新提交的任務。

ShutDownNow

這個方法與上面方法相比較,直觀就是 now ,即立即停止任務,同樣是上述案列,略作修改如下,

public static void main(String[] args) throws InterruptedException { ExecutorService service = new ThreadPoolExecutor(10,10,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(1000)); for (int i = 0; i < 1000; i++) { service.submit(() ->{try { TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) { System.out.println('接受中斷,結束線程~~'); //這里響應中斷 return;}System.out.println('args = ' + Arrays.deepToString(args)+ Thread.currentThread().getName()); }); } final List<Runnable> runnables = service.shutdownNow(); System.out.println(runnables); } 執行上述代碼我們發現,當執行shutDownNow 方法后,會像全部正在運行的隊列通知中斷,正在運行的線程接收到中斷信號后選擇處理,而在隊列中的全部取消執行轉移到一個list隊列中返回,如上述 List<Runnable> runnables ,這里記錄了所有終止的線程

awaitTermination

這個方法并不是用來關閉線程池的,首先我們看一下這個方法的定義:

boolean awaitTermination_(long timeout, TimeUnit unit)_

可以看到這個方法有兩個參數,timeout 表示等待的時間,unit 時間單位 這個方法的作用是,調用后等待timeout時間后,反饋線程池的狀態, 等待期間(包括進入等待狀態之前)線程池已關閉并且所有已提交的任務(包括正在執行的和隊列中等待的)都執行完畢,相當于線程池已經“終結”了,方法便會返回 true; 等待超時時間到后,第一種線程池“終結”的情況始終未發生,方法返回 false; 等待期間線程被中斷,方法會拋出 InterruptedException 異常。 上面代碼可以修改來測試,這里不再粘貼代碼

isShutDown

isShutDown 方法正如名字,判斷線程池是否停止,返回的是 Boolean 類型,如果已經開始停止線程池則返回 true 否則放回false 當調用了shutDown 或shutDownNow 時之后,會返回 true 不過需要注意,這時候只是代表線程池關閉流程的開始,并不是說線程池已經停止了

isTerminated

這個方法與上面的方法的區別就是這是正真檢測線程池是否真的終結了 這不僅代表線程池已關閉,同時代表線程池中的所有任務都已經都執行完畢了,因為在調用 shutdown方法之后,線程池會繼續執行里面未完成的任務,包括正在執行的任務和在任務隊列中等待的任務。 如果調用了 shutdown 方法,但是有一個線程依然在執行任務,那么此時調用 isShutdown方法返回的是 true,而調用 isTerminated方法返回的便是 false,因為線程池中還有任務正在在被執行,線程池并沒有真正“終結”。 直到所有任務都執行完畢了,調用 isTerminated()方法才會返回 true,這表示線程池已關閉并且線程池內部是空的,所有剩余的任務都執行完畢了。

作者:AnonyStar

原文鏈接:https://www.cnblogs.com/i-code/p/14024845.html

以上就是java 優雅關閉線程池的方案的詳細內容,更多關于Java 關閉線程池的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | crm客户关系管理系统,销售管理系统,crm系统,在线crm,移动crm系统 - 爱客crm | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 商标转让-商标注册-商标查询-软著专利服务平台 - 赣江万网 | 长沙广告公司_制作,长沙喷绘_发光字_招牌制作_长沙泓润广告官网 长城人品牌官网 | 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 汕头市盛大文化传播有限公司,www.11400.cc| 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 挤出熔体泵_高温熔体泵_熔体出料泵_郑州海科熔体泵有限公司 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 蒸压釜_蒸养釜_蒸压釜厂家-山东鑫泰鑫智能装备有限公司 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 进口消泡剂-道康宁消泡剂-陶氏消泡剂-大洋消泡剂 | 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 在线悬浮物浓度计-多参数水质在线检测仪-上海沃懋仪表科技有限公司 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 上海风淋室_上海风淋室厂家_上海风淋室价格_上海伯淋 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 |