作为标题。
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?
答案 0 :(得分:12)
来自Thread.sleep
的Javadoc(由TimeUnit.sleep
调用):
InterruptedException - 如果有任何线程中断了当前线程。抛出此异常时,将清除当前线程的中断状态。
我认为isInterrupted()
的意图是允许您在调用将抛出InterruptedException
的内容之前检测线程是否已被中断。如果你抓住了 InterruptedException
,那么可以假设线程已经被中断......