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

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

詳解Java停止線程的四種方法

瀏覽:29日期:2022-08-12 14:39:31
一、線程停止基礎(chǔ)知識(shí) interrupted(): 測(cè)試當(dāng)前線程是否已經(jīng)中斷。該方法為靜態(tài)方法,調(diào)用后會(huì)返回boolean值。不過(guò)調(diào)用之后會(huì)改變線程的狀態(tài),如果是中斷狀態(tài)調(diào)用的,調(diào)用之后會(huì)清除線程的中斷狀態(tài)。 isInterrupted(): 測(cè)試線程是否已經(jīng)中斷。該方法由對(duì)象調(diào)用 interrupt(): 標(biāo)記線程為中斷狀態(tài),不過(guò)不會(huì)中斷正在運(yùn)行的線程。 stop(): 暴力停止線程。已棄用。 二、停止線程方法1:異常法停止

線程調(diào)用interrupt()方法后,在線程的run方法中判斷當(dāng)前對(duì)象的interrupted()狀態(tài),如果是中斷狀態(tài)則拋出異常,達(dá)到中斷線程的效果。

如下示例:

MyThread.java

public class MyThread extends Thread { @Override public void run() {try { for (int i = 0; i < 500000; i++) {if (MyThread.interrupted()){ System.out.println('已經(jīng)是停止?fàn)顟B(tài)了,我要退出了!'); throw new InterruptedException();}System.out.println('i = ' + (i+1)); } System.out.println('如果我被輸出了,則代表線程沒(méi)有停止');} catch (InterruptedException e) { System.out.println('在MyThread類中的run方法中被捕獲'); e.printStackTrace();} }}

Main.java

/** * 根據(jù)中斷狀態(tài)退出for循環(huán) * @Author: xjf * @Date: 2019/5/25 13:27 */public class Main { public static void main(String[] args) {try { MyThread myThread = new MyThread(); myThread.start(); Thread.sleep(100); myThread.interrupt();} catch (InterruptedException e) { e.printStackTrace();}System.out.println('end!'); }}

結(jié)果如下:i = 19115i = 19116i = 19117i = 19118i = 19119end!

已經(jīng)是停止?fàn)顟B(tài)了,我要退出了!在MyThread類中的run方法中被捕獲java.lang.InterruptedException at com.book.interrupt_exit.MyThread.run(MyThread.java:15)

Process finished with exit code 0

三、停止線程方法2:在沉睡中停止

先將線程sleep,然后調(diào)用interrupt標(biāo)記中斷狀態(tài),interrupt會(huì)將阻塞狀態(tài)的線程中斷。會(huì)拋出中斷異常,達(dá)到停止線程的效果。如下示例:

MyThread.java

public class MyThread extends Thread { @Override public void run() {try { System.out.println('run-----------start'); Thread.sleep(5000); System.out.println('run-----------end');} catch (InterruptedException e) { System.out.println('在沉睡中被停止!進(jìn)入catch,線程的是否處于停止?fàn)顟B(tài):' + this.isInterrupted()); e.printStackTrace();} }}

Main.java

public class Main { public static void main(String[] args) {try { MyThread myThread = new MyThread(); myThread.start(); Thread.sleep(2000); System.out.println('狀態(tài):'+MyThread.interrupted()); myThread.interrupt();} catch (InterruptedException e) { e.printStackTrace();} }}

結(jié)果run-----------start狀態(tài):falsejava.lang.InterruptedException: sleep interrupted在沉睡中被停止!進(jìn)入catch,線程的是否處于停止?fàn)顟B(tài):false at java.lang.Thread.sleep(Native Method) at com.book.sleep_interrupt.MyThread.run(MyThread.java:13)

線程先調(diào)用interrupt標(biāo)記中斷狀態(tài),然后線程再睡眠。會(huì)拋出中斷異常,達(dá)到停止線程的效果。如下:

MyThread1.java

public class MyThread1 extends Thread { @Override public void run() {try { for (int i = 0; i < 100000; i++) {System.out.println('i = ' + (i+1)); } System.out.println('run begin'); //interrupt是做一個(gè)中斷標(biāo)記,當(dāng)時(shí)不會(huì)去中斷正在運(yùn)行的線程,當(dāng)該線程處于阻塞狀態(tài)時(shí)就會(huì)進(jìn)行中斷 //因此,先進(jìn)行interrupt后,再遇到sleep阻塞時(shí),才會(huì)進(jìn)行中斷 Thread.sleep(200000); System.out.println('run end');} catch (InterruptedException e) { System.out.println('先停止,再遇到了sleep! 進(jìn)入catch!'); e.printStackTrace();} }}

Main1.java

public class Main1 { public static void main(String[] args) {MyThread1 myThread1 = new MyThread1();myThread1.start();myThread1.interrupt();System.out.println('end!'); }}

結(jié)果:i = 99993i = 99994i = 99995i = 99996i = 99997i = 99998i = 99999i = 100000run begin

先停止,再遇到了sleep! 進(jìn)入catch!java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at com.book.sleep_interrupt.MyThread1.run(MyThread1.java:19)

四、停止線程方法3:stop()暴力停止

線程調(diào)用stop()方法會(huì)被暴力停止,方法已棄用。該方法會(huì)有不好的后果:

強(qiáng)制讓線程停止有可能使一些請(qǐng)理性的工作得不到完成。 對(duì)鎖定的對(duì)象進(jìn)行了“解鎖”,導(dǎo)致數(shù)據(jù)得不到同步的處理,出現(xiàn)數(shù)據(jù)不一致的問(wèn)題(比如一個(gè)方法加上了synchronized,并在其中進(jìn)行了一個(gè)長(zhǎng)時(shí)間的處理,而在處理結(jié)束之前該線程進(jìn)行了stop(),則未完成的數(shù)據(jù)將沒(méi)有進(jìn)行到同步的處理) 五、停止線程方法4:使用return停止線程

調(diào)用interrupt標(biāo)記為中斷狀態(tài)后,在run方法中判斷當(dāng)前線程狀態(tài),如果為中斷狀態(tài)則return,能達(dá)到停止線程的效果。

備注:建議使用“拋異常”的方法來(lái)實(shí)現(xiàn)線程的停止,因?yàn)樵赾atch塊中還可以將異常向上拋,使線程停止的事件得以傳播

參考:《Java多線程編程核心技術(shù)》

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 氮化镓芯片-碳化硅二极管 - 华燊泰半导体| 深圳市源和塑胶电子有限公司-首页 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 成都茶楼装修公司 - 会所设计/KTV装修 - 成都朗煜装饰公司 | PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 巩义市科瑞仪器有限公司| 培训无忧网-教育培训咨询招生第三方平台 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 | 房间温控器|LonWorks|海思| 精密模具制造,注塑加工,吹塑和吹瓶加工,EPS泡沫包装生产 - 济南兴田塑胶有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 电动葫芦-河北悍象起重机械有限公司| 粘度计维修,在线粘度计,二手博勒飞粘度计维修|收购-天津市祥睿科技有限公司 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 专业生产动态配料系统_饲料配料系统_化肥配料系统等配料系统-郑州鑫晟重工机械有限公司 |