求助: 关于Thread.interrupt的解释!看不明白

忆童 发布于 2011/09/07 16:07
阅读 405
收藏 1

interrupt

public 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 - 如果当前线程无法修改该线程
加载中
0
磊神Ray
磊神Ray

就是说了中断线程的执行,及其异常是在什么情况下会触发的

0
浪客Dandy
浪客Dandy

根据我的理解interrupt的存在是为了通知你thread的异常状况,并且维护java多线程内部的一些状态。你需要注意的是

1. 不要去调用任何thread.interrupt 哪怕是你自己写的,用共享的变量或者其他方式实现

2. 正确的捕捉和对待interrupt exception

0
page_zxy
page_zxy

中断该线程,并且判断返回值是否true(说明要中断线程),如果是中断就需要自己手动break 退出线程

返回顶部
顶部