我找到了JavaDoc的方法:
返回:
true 如果该线程已被中断;否则为假。
我认为我对该方法的理解有问题。此外,我可能误解了线程中“中断”的概念。
欢迎任何解释!谢谢你!
代码片段:
在线程定义中:
public void run() {
try {
//Do something
} catch (InterruptedException e) {
System.out.println(isInterrupted());//Always false
return;
}
}
invoke:
theThread.interrupt();
这种行为是通常记录在抛出该异常的方法中。例如,javadocObject.wait()
says:
"InterruptedException
- 如果任何线程在当前线程等待通知之前或期间中断了当前线程。当抛出该异常时,当前线程的中断状态被清除。"
事实上,异常的 javadoc 本身是这样说的:
” 有时候一个方法可能希望测试当前线程是否被中断,如果是,则立即抛出这个异常。可以使用下面的代码来实现这个效果:
if (Thread.interrupted()) // Clears interrupted status!
throw new InterruptedException();
注意他们如何强调那个旗帜should在抛出异常之前被清除。
为什么它被设计成这样工作?你必须问设计师,但我希望他们认为异常处理程序应该handle情况,因此此时应该没有必要继续设置该标志。 (如果处理程序不能完全处理这种情况,它可以重新抛出异常,或者调用Thread.getCurrentThread.interrupt()
再次设置标志。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)