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

您的位置:首頁技術(shù)文章
文章詳情頁

Java使用ExecutorService來停止線程服務

瀏覽:100日期:2022-09-03 09:38:48

使用ExecutorService來停止線程服務

之前的文章中我們提到了ExecutorService可以使用shutdown和shutdownNow來關(guān)閉。

這兩種關(guān)閉的區(qū)別在于各自的安全性和響應性。shutdownNow強行關(guān)閉速度更快,但是風險也更大,因為任務可能正在執(zhí)行的過程中被結(jié)束了。而shutdown正常關(guān)閉雖然速度比較慢,但是卻更安全,因為它一直等到隊列中的所有任務都執(zhí)行完畢之后才關(guān)閉。

使用shutdown

我們先看一個使用shutdown的例子:

public void useShutdown() throws InterruptedException { ExecutorService executor = Executors.newFixedThreadPool(10); Runnable runnableTask = () -> { try {TimeUnit.MILLISECONDS.sleep(300); } catch (InterruptedException e) {e.printStackTrace(); } }; executor.submit(runnableTask); executor.shutdown(); executor.awaitTermination(800, TimeUnit.MILLISECONDS); }

awaitTermination將會阻塞直到所有正在執(zhí)行的任務完成,或者達到指定的timeout時間。

使用shutdownNow

當通過shutdownNow來強行關(guān)閉ExecutorService是, 它會嘗試取消正在執(zhí)行的任務,并返回所有已經(jīng)提交但是還沒有開始的任務。從而可以將這些任務保存起來,以便以后進行處理。

但是這樣我們只知道了還沒有開始執(zhí)行的任務,對于那些已經(jīng)開始執(zhí)行但是沒有執(zhí)行完畢卻被取消的任務我們無法獲取。

我們看下如何獲得開始執(zhí)行但是還沒有執(zhí)行完畢的任務:

public class TrackingExecutor extends AbstractExecutorService { private final ExecutorService executorService; private final Set<Runnable> taskCancelledAtShutdown= Collections.synchronizedSet(new HashSet<Runnable>()); public TrackingExecutor(ExecutorService executorService){ this.executorService=executorService; } @Override public void shutdown() { executorService.shutdown(); } @Override public List<Runnable> shutdownNow() { return executorService.shutdownNow(); } @Override public boolean isShutdown() { return executorService.isShutdown(); } @Override public boolean isTerminated() { return executorService.isTerminated(); } @Override public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { return executorService.awaitTermination(timeout,unit); } @Override public void execute(Runnable command) { executorService.execute(() -> { try {command.run(); }finally {if(isShutdown() && Thread.currentThread().isInterrupted()){ taskCancelledAtShutdown.add(command);} } }); } public List<Runnable> getCancelledTask(){ if(! executorService.isTerminated()){ throw new IllegalStateException('executorService is not terminated'); } return new ArrayList<>(taskCancelledAtShutdown); }}

上面的例子中我們構(gòu)建了一個新的ExecutorService,他傳入一個ExecutorService,并對其進行封裝。

我們重寫了execute方法,在執(zhí)行完畢判斷該任務是否被中斷,如果被中斷則將其添加到CancelledTask列表中。

并提供一個getCancelledTask方法來返回未執(zhí)行完畢的任務。

我們看下怎么使用:

public void useShutdownNow() throws InterruptedException { TrackingExecutor trackingExecutor=new TrackingExecutor(Executors.newCachedThreadPool()); Runnable runnableTask = () -> { try {TimeUnit.MILLISECONDS.sleep(300); } catch (InterruptedException e) {e.printStackTrace(); } }; trackingExecutor.submit(runnableTask); List<Runnable> notrunList=trackingExecutor.shutdownNow(); if(trackingExecutor.awaitTermination(800, TimeUnit.SECONDS)){ List<Runnable> runButCancelledList= trackingExecutor.getCancelledTask(); } }

trackingExecutor.shutdownNow()返回的是未執(zhí)行的任務。而trackingExecutor.getCancelledTask()返回的是被取消的任務。

上面的任務其實還有一個缺點,因為我們在存儲被取消的任務列表的額時候taskCancelledAtShutdown.add(command),因為之前的判斷不是原子操作,則可能會產(chǎn)生誤報。

本文的例子請參考https://github.com/ddean2009/learn-java-concurrency/tree/master/ExecutorServiceShutdown

到此這篇關(guān)于Java使用ExecutorService來停止線程服務的文章就介紹到這了,更多相關(guān)Java ExecutorService停止線程內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 混合反应量热仪-高温高压量热仪-微机差热分析仪DTA|凯璞百科 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 5nd音乐网|最新流行歌曲|MP3歌曲免费下载|好听的歌|音乐下载 免费听mp3音乐 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 减速机_上海宜嘉减速机| 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气| 许昌奥仕达自动化设备有限公司 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 上海阳光泵业制造有限公司 -【官方网站】| 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 浙江寺庙设计-杭州寺院设计-宁波寺庙规划_汉匠 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 电梯乘运质量测试仪_电梯安全评估测试仪-武汉懿之刻 | 电梯乘运质量测试仪_电梯安全评估测试仪-武汉懿之刻 | 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 导电银胶_LED封装导电银胶_半导体封装导电胶厂家-上海腾烁 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 广州各区危化证办理_危险化学品经营许可证代办| Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 溶氧传感器-pH传感器|哈美顿(hamilton) | 硬齿面减速机_厂家-山东安吉富传动设备股份有限公司 |