当前位置: 首页 > 面试题库 >

捕获“ InterruptedException”后,为什么“ Thread.currentThread()。isInterrupted()”的值为false?

司空宗清
2023-03-14
问题内容

作为标题。

public static void main(String[] args) throws InterruptedException {

    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.out.println(Thread.currentThread().isInterrupted());   //print false, who reset the interrupt?

            }
        }
    });

    thread.start();
    TimeUnit.SECONDS.sleep(1);
    thread.interrupt();
}

捕获“ InterruptedException”后,为什么“
Thread.currentThread()。isInterrupted()”的值为false?


问题答案:

在Javadoc中Thread.sleep(由调用TimeUnit.sleep):

InterruptedException-如果任何线程中断了当前线程。引发此异常时,将清除当前线程的中断状态。

我认为的目的isInterrupted()是让您 调用可能引发的事件 之前
检测线程是否已中断InterruptedException。如果您 抓到了 InterruptedException,可以公平地假设线程
被中断…



 类似资料:
  • 问题内容: 在有效的Java(第275页)中,有以下代码段: 捕获中断异常以重新引发它有什么用?为什么不让它飞呢? 问题答案: 简单的答案是,这是一个检查的异常,它不在方法(或方法)的签名中。所以你必须抓住它。一旦发现它,建议您设置为设置中断标志。除非您确实打算压缩中断。

  • 我很困惑,无法理解为什么不应该吞掉InterruptedException。 IBM的文章说 当阻塞方法检测到中断并抛出InterruptedException时,它将清除中断状态。如果捕捉到InterruptedException,但无法重新抛出它,则应保留中断发生的证据,以便调用堆栈上更高的代码能够获悉中断,并在需要时对其做出响应 还请解释一下上面的规则?

  • 在我的代码中,在使用非整数(例如17.9)给出年龄值后,我无法捕获异常 另外,我的最终没有打印出来<是否有语法错误??

  • 由于找不到文件,send方法返回null BufferedReader。Eclipse只是说有一个NullPointerException是因为print方法,但是当我移除所有try/catch语句时,Eclipse说我需要编写方法抛出IOException或FileNotFoundException,它也允许我这样做,如果我不这样做,它就抛出一个FileNotFoundException。然而,

  • 问题内容: 我的系统是ubuntu 12.04。我从修改了示例,并添加了示例。但是生成时我无法获得输出。 是一个错误吗?源代码的片段如下: 问题答案: 请参阅此答案以及该答案以获取详细说明。仔细阅读signal(7)和signal-safety(7)。也请记住,虚拟地址空间的的过程中是常见的,和之间,所有的共享线程是进程。另请参见proc(5)(并使用pmap(1)),并尝试 从您的进程内部进行读

  • 当线程被终止()时,它仍然不会被中断。为什么? 我找到了这个,我找到了这个,但都没有回答我的问题。我在OpenJDK 11和Oracle JDK 16上试用过这个方法--没有区别,结果一样。 我现在已经用Java工作了10多年,多线程任务对我来说一直很清楚;然而,意外地,我遇到了一些奇怪的事情(对我来说),这让我感到奇怪。 我理解,只是类的一个标志(字段),我可以将它与结合使用,以便在获得的情况下