Android Thread interrupt 中断JAVA线程(An-Beer 工作室)_第1页
Android Thread interrupt 中断JAVA线程(An-Beer 工作室)_第2页
Android Thread interrupt 中断JAVA线程(An-Beer 工作室)_第3页
Android Thread interrupt 中断JAVA线程(An-Beer 工作室)_第4页
Android Thread interrupt 中断JAVA线程(An-Beer 工作室)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论