




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android Thread interrupt 中断JAVA线程(转)转载自:假如我们有一个任务如下,交给一个Java线程来执行,如何才能保证调用interrupt()来中断它呢?代码 1classATaskimplementsRunnable23privatedoubled=0.0;45publicvoidrun()6/死循环执行打印Iamrunning!和做消耗时间的浮点计算7while(true)8System.out.println(Iamrunning!);910for(inti=0;i900000;i+)11d=d+(Math.PI+Math.E)/d;1213/给线程调度器可以
2、切换到其它进程的信号14Thread.yield();151617代码 1publicclassInterruptTaskTest23publicstaticvoidmain(Stringargs)throwsException4/将任务交给一个线程执行5Threadt=newThread(newATask();6t.start();78/运行一断时间中断线程9Thread.sleep(100);10System.out.println(*);11System.out.println(InterruptedThread!);12System.out.println(*);13erru
3、pt();141516运行这个程序,我们发现调用interrupt()后,程序仍在运行,如果不强制结束,程序将一直运行下去,如下所示: Java代码1. . 2. I am running! 3. I am running! 4. I am running! 5. I am running! 6. * 7. Interrupted Thread! 8. * 9. I am running! 10. I am running! 11. I am running! 12. I am running! 13. I am running! 14. . 虽然中断发生了,但线程仍然在进行,离开线程有两种常
4、用的方法: 抛出InterruptedException和用Terrupted()检查是否发生中断,下面分别看一下这两种方法: 1.在阻塞操作时如Thread.sleep()时被中断会抛出InterruptedException(注意,进行不能中断的IO操作而阻塞和要获得对象的锁调用对象的synchronized方法而阻塞时不会抛出InterruptedException) 代码 1classATaskimplementsRunnable23privatedoubled=0.0;45publicvoidrun()6/死循环执行打印Iamrunning!和做消耗时间的浮点计算7
5、try8while(true)9System.out.println(Iamrunning!);1011for(inti=0;i900000;i+)12d=d+(Math.PI+Math.E)/d;1314/休眠一断时间,中断时会抛出InterruptedException15Thread.sleep(50);1617catch(InterruptedExceptione)18System.out.println(ATask.run()interrupted!);19202122程序运行结果如下: Java代码1. I am running! 2. I am running! 3. * 4.
6、Interrupted Thread! 5. * 6. ATask.run() interrupted! 可以看到中断任务时让任务抛出InterruptedException来离开任务 2.Terrupted()检查是否发生中断.Terrupted()能告诉你线程是否发生中断,并将清除中断状态标记,所以程序不会两次通知你线程发生了中断 代码 1classATaskimplementsRunnable23privatedoubled=0.0;45publicvoidrun()67/检查程序是否发生中断8while(!Terrupted()9S
7、ystem.out.println(Iamrunning!);1011for(inti=0;i900000;i+)12d=d+(Math.PI+Math.E)/d;13141516System.out.println(ATask.run()interrupted!);171819程序运行结果如下: Java代码1. I am running! 2. I am running! 3. I am running! 4. I am running! 5. I am running! 6. I am running! 7. I am running! 8. * 9. Interrupted Threa
8、d! 10. * 11. ATask.run() interrupted! 我们可结合使用两种方法来达到可以通过interrupt()中断线程.请看下面例子: 代码 1classATaskimplementsRunnable23privatedoubled=0.0;45publicvoidrun()67try8/检查程序是否发生中断9while(!Terrupted()10System.out.println(Iamrunning!);11/point1beforesleep12Thread.sleep(20);13/point2aftersleep14System.out.
9、println(Calculating);15for(inti=0;i900000;i+)16d=d+(Math.PI+Math.E)/d;17181920catch(InterruptedExceptione)21System.out.println(ExitingbyException);222324System.out.println(ATask.run()interrupted!);252627在point1之前处point2之后发生中断会产生两种不同的结果,可以通过修改InterruptTaskTest main()里的Thread.sleep()的时间来达到在point1之前产生中
10、断或在point2之后产生中断. 如果在point1之前发生中断,程序会在调用Thread.sleep()时抛出InterruptedException从而结束线程这和在Thread.sleep()时被中断是一样的效果.程序运行结果可能如下: Java代码1. I am running! 2. Calculating 3. I am running! 4. Calculating 5. I am running! 6. Calculating 7. I am running! 8. * 9. Interrupted Thread! 10. * 11. Exiting by Exception 12. ATask.run() interrupted! 如果在point2之后发生中断,线程会继续执行到下一次while判断中断状态时程序运行结果可能如下: J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三年级下语文教学设计太阳是大家的
- 邵东二中考试试卷及答案
- 山西高二联考试卷及答案
- 三原职教高考试卷及答案
- 2025至2030年中国贵金属清洗机市场分析及竞争策略研究报告
- 硅冶炼原料选择与配料计算考核试卷
- 矿产勘查项目管理流程与效率提升考核试卷
- 经济型酒店品牌竞争策略考核试卷
- 毛皮服装设计与时尚趋势预测考核试卷
- 社会人文与消费者行为考核试卷
- 《特斯拉汽车供应链管理》课件
- 内河船舶船员基本安全知识考试题库300题(含答案)
- 无人机操控 教学设计公开课教案教学设计课件
- 2024 年普通高等学校招生全国统一考试新课标 I 卷-数学试卷-全国
- 《瑞幸咖啡财务造假案例分析》8400字(论文)
- 安全生产法律法规注册安全工程师考试(初级)试题与参考答案(2024年)一
- (试卷)2024贵州省初中学业水平考试·物理
- 云南省职业技能大赛(健康照护赛项)理论参考试题及答案
- 自然辩证法论述题146题带答案(可打印版)
- DB43T 2534-2022 电力气象服务技术规范
- 工程合伙人协议书范文模板下载电子版
评论
0/150
提交评论