Reputation: 6546
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
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