在捕获“I​​nterruptedException”之后,为什么“Thread.currentThread()。isInterrupted()”的值为false?

时间:2012-03-28 05:31:51

标签: java multithreading interrupt

作为标题。

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?

1 个答案:

答案 0 :(得分:12)

来自Thread.sleep的Javadoc(由TimeUnit.sleep调用):

  

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

我认为isInterrupted()的意图是允许您在调用将抛出InterruptedException的内容之前检测线程是否已被中断。如果你抓住了 InterruptedException,那么可以假设线程已经被中断......