после перехвата «InterruptedException», почему значение «Thread.currentThread (). isInterrupted ()» имеет значение false? - PullRequest
3 голосов
/ 28 марта 2012

в качестве заголовка.

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 Ответ

12 голосов
/ 28 марта 2012

Из Javadoc для Thread.sleep (вызывается TimeUnit.sleep):

InterruptedException - если какой-либо поток прервал текущий поток. Прерванное состояние текущего потока очищается при возникновении этого исключения.

Я думаю, что цель isInterrupted() состоит в том, чтобы позволить вам определить, был ли поток прерван до того, как вызовет что-то, что вызовет InterruptedException. Если вы поймали InterruptedException, можно предположить, что поток прервал ...

...