为什么Thread.isInterrupted()总是返回false?

2024-02-25

我找到了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(使用前将#替换为@)

为什么Thread.isInterrupted()总是返回false? 的相关文章

随机推荐