中断进程theradinterrupted.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中断进程theradinterrupted

在学校的论坛Java版发现很多问关于这样的问题,比如这几个方法有什么区别,想看errupt()方法后线程的中断状态;如何终止一个线程 其实之前已经大部分提及到。现总结一下,然后加上例子,毕竟例子容易理解 /fhtdy2004/archive/2009/06/08/280728.html中有关interrupt()的解释已经很清楚了 interruptpublic void interrupt() 中断线程。 如果当前线程没有中断它自己(这在任何情况下都是允许的),则该线程的 checkAccess 方法就会被调用,这可能抛出 SecurityException。 如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 InterruptedException。 如果该线程在可中断的通道上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。 如果该线程在一个 Selector 中受阻,则该线程的中断状态将被设置,它将立即从选择操作返回,并可能带有一个非零值,就好像调用了选择器的 wakeup 方法一样。 如果以前的条件都没有保存,则该线程的中断状态将被设置。 抛出: SecurityException - 如果当前线程无法修改该线程 -------------------------------------------------------------------------------- interruptedpublic static boolean interrupted() 测试当前线程是否已经中断。线程的中断状态 由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。 返回: 如果当前线程已经中断,则返回 true;否则返回 false。 另请参见: isInterrupted() -------------------------------------------------------------------------------- isInterruptedpublic boolean isInterrupted() 测试线程是否已经中断。线程的中断状态 不受该方法的影响。 返回: 如果该线程已经中断,则返回 true;否则返回 false。 另请参见: interrupted() errupt()不会中断正在执行的线程,只是将线程的标志位设置成true。但是如果线程在调用sleep(),join(),wait()方法时线程被中断,则这些方法会抛出InterruptedException,在catch块中捕获到这个异常时,线程的中断标志位已经被设置成false了,因此在此catch块中调用t.isInterrupted(),Terrupted()始终都为false, 而t.isInterrupted与Terrupted()的区别是API中已经说明很明显了,Terrupted()假如当前的中断标志为true,则调完后会将中断标志位设置成false Java代码 ?package?threadtest;?import?java.util.Timer;import?java.util.TimerTask;?class?CanStop?extends?Thread?{??private?int?counter?=?0;??public?void?run()?{?boolean?done?=?false;?try{?Thread.sleep(100);//设置成100比主线程中的500要小?}catch(InterruptedException?ie){?ie.printStackTrace();?//return;假如要使用interrupt来终止线程则在捕获的InterruptedException中return?}?while?(counter??100000?!done)?{?System.out.println(counter++);?//在主线程中调用errupt()之前为false,假如之后没有调用Terrupted()则一直为true,?//否则为第一次为true,调用Terrupted之后为false?System.out.println(i

文档评论(0)

shaoye348 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档