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

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

Java 正確終止線程的方法

瀏覽:4日期:2022-08-20 09:51:02

Thread類中有一個(gè)已經(jīng)廢棄的 stop() 方法,它可以終止線程,但由于它不管三七二十一,直接終止線程,所以被廢棄了。比如,當(dāng)線程被停止后還需要進(jìn)行一些善后操作(如,關(guān)閉外部資源),使用這個(gè)方法就無能為力了。可以通過線程中斷來實(shí)現(xiàn)線程終止。

首先來看一下Java線程中斷的一些內(nèi)容:

Java平臺(tái)為每個(gè)線程維護(hù)了一個(gè)布爾型的中斷標(biāo)記,可以通過下列方法獲取該標(biāo)記的值:

interrupt() 中斷某個(gè)線程 isInterrupted() 返回該線程的中斷標(biāo)記 interrupted() 返回并重置該線程的中斷標(biāo)記(置為false)

中斷僅是發(fā)起線程對(duì)目標(biāo)線程的一種請(qǐng)求,也就是說,目標(biāo)線程對(duì)這種請(qǐng)求可以相應(yīng),也可以忽略。 Java標(biāo)準(zhǔn)庫中與線程阻塞相關(guān)的方法對(duì)中斷的相應(yīng)方式都是拋出 InterruptedException 異常,并且按照慣例,拋出異常前都會(huì)重置中斷標(biāo)記為false,因此這些方法會(huì)清空線程的中斷標(biāo)記。 Java標(biāo)準(zhǔn)庫中與線程阻塞相關(guān)的方法在進(jìn)行阻塞前會(huì)判斷中斷標(biāo)記是否為true,為true則拋出異常;如果在阻塞后調(diào)用中斷方法的話,那么JVM會(huì)設(shè)置該線程的中斷標(biāo)記,然后將該線程喚醒,因此中斷具有喚醒線程的作用。

由上面幾點(diǎn)和第二句加粗的話可知,可以使用線程中斷來實(shí)現(xiàn)線程終止,只要目標(biāo)線程判斷一下中斷標(biāo)記即可,即使被中斷的線程正處于阻塞狀態(tài),也能把他喚醒起來終止;由第一句加粗的話可知,直接使用線程中斷實(shí)現(xiàn)線程終止是存在風(fēng)險(xiǎn)的,因?yàn)榭赡苷{(diào)用了一些Java標(biāo)準(zhǔn)庫的阻塞方法,而導(dǎo)致了中斷標(biāo)記被清空,也就無法獲得中斷標(biāo)記了(總是false),因此需要自己創(chuàng)建一個(gè)中斷標(biāo)記配合使用。

如,下面是一個(gè)可中斷的任務(wù)執(zhí)行器,他會(huì)在每次執(zhí)行任務(wù)前,判斷一下自定i的終止標(biāo)記和剩余的任務(wù)數(shù)(善后);提供的shutdown方法除了將工作線程中斷外(主要作用是喚醒可能處于阻塞狀態(tài)的任務(wù)),還會(huì)將終止交集 terminated 置為 true。

執(zhí)行 main 方法,可以發(fā)現(xiàn),首先會(huì)打印出“客戶端調(diào)用了 shutdown 方法”,然后過了四秒,main線程才會(huì)終止,可知shutdown方法正確地將目標(biāo)線程終止了。關(guān)于“按照慣例,Java標(biāo)準(zhǔn)庫中拋出InterruptedException異常的和線程相關(guān)的阻塞方法會(huì)清空中斷標(biāo)記”,可以將條件中的 !interminated 替換成 !Thread.currentThread().isInterrupted(),然后再執(zhí)行main方法測(cè)試,可以發(fā)現(xiàn)main線程始終無法終止,因?yàn)?sleep() 方法清空了中斷標(biāo)記,所以 !Thread.currentThread().isInterrupted() 始終為true,導(dǎo)致工作線程始終無法終止。

public class TerminableTaskRunner { // 存儲(chǔ)要執(zhí)行的任務(wù) private final BlockingQueue<Runnable> tasks; // 線程終止標(biāo)志 private volatile boolean terminated; // 剩余的任務(wù)數(shù) private final AtomicInteger count; // 實(shí)際執(zhí)行任務(wù)的線程 private volatile Thread workThread; public TerminableTaskRunner(int capacity) {this.tasks = new LinkedBlockingDeque<>(capacity);this.count = new AtomicInteger(0);this.workThread = new WorkThread();workThread.start(); } public void submit(Runnable task) {this.tasks.add(task);this.count.incrementAndGet(); } public void shutdown() {terminated = true; // 線程終止標(biāo)志,由于中斷標(biāo)志可能會(huì)被覆蓋,所以需要自己創(chuàng)建一個(gè)標(biāo)志if (workThread != null) workThread.interrupt(); // 喚醒線程 } private class WorkThread extends Thread {@Overridepublic void run() { Runnable task; try {while (!terminated || tasks.size() >= 1) { task = tasks.take(); try {task.run(); // 可能會(huì)清空當(dāng)前線程的中斷標(biāo)記,如task.run()在內(nèi)部調(diào)用的阻塞方法拋出了InterruptedException } catch (Throwable e) {e.printStackTrace(); } count.decrementAndGet();} } catch (InterruptedException e) {// 一旦調(diào)用shutdown且tasks.take()阻塞住,就拋出該異常,沒有任務(wù)要執(zhí)行,直接終止workThread = null; }} } public static void main(String[] args) {TerminableTaskRunner taskRunner = new TerminableTaskRunner(4);for (int i = 0; i < 4; i++) { taskRunner.submit(()->{try { TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) { System.out.println('客戶端調(diào)用了 shutdown 方法');} });}taskRunner.shutdown(); }}

以上就是Java 正確終止線程的方法的詳細(xì)內(nèi)容,更多關(guān)于Java 終止線程的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 精密模具-双色注塑模具加工-深圳铭洋宇通| 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 衬氟止回阀_衬氟闸阀_衬氟三通球阀_衬四氟阀门_衬氟阀门厂-浙江利尔多阀门有限公司 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 搪玻璃冷凝器_厂家-越宏化工设备| 14米地磅厂家价价格,150吨地磅厂家价格-百科 | 打造全球沸石生态圈 - 国投盛世| GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 伸缩器_伸缩接头_传力接头-巩义市润达管道设备制造有限公司 | 挨踢网-大家的导航! | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 驾驶人在线_专业学车门户网站| 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 | 磁力反应釜,高压釜,实验室反应釜,高温高压反应釜-威海自控反应釜有限公司 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 新车测评网_网罗汽车评测资讯_汽车评测门户报道 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 上海道勤塑化有限公司 | 脉冲除尘器,除尘器厂家-淄博机械 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 云杂志网-学术期刊-首页 | 横河变送器-横河压力变送器-EJA变送器-EJA压力变送器-「泉蕴仪表」 | 浙江清风侠环保设备有限公司| 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 |