jiafu
jiafu

Reputation: 6546

after catching "InterruptedException", why "Thread.currentThread().isInterrupted()"'s value is false?

as the title.

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();
}

after catching "InterruptedException", why "Thread.currentThread().isInterrupted()"'s value is false?

Upvotes: 3

Views: 2246

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1500105

From the Javadoc for Thread.sleep (called by TimeUnit.sleep):

InterruptedException - if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

I think the intention of isInterrupted() is to allow you to detect whether a thread has been interrupted before calling something which would throw InterruptedException. If you've caught InterruptedException, it's fair to assume that the thread has been interrupted...

Upvotes: 13

Related Questions