try {
Thread.sleep(1000);
} catch(InterruptedException e) {
System.out.println("Interrupted, NOT PRINTED");
}
System.out.println ("This statement is printed");
在这段代码中,sleep会抛出一个interrupttedexception但是这不会在输出中打印catch语句。为什么?
答案 0 :(得分:3)
你应该阅读睡眠方法的完整Javadoc(注意重点):
睡眠
public static void sleep(long millis) throws InterruptedException
使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统定时器和调度程序的精度和准确性。线程不会失去任何监视器的所有权。
的参数强>:
millis - 以毫秒为单位的睡眠时间 的抛出强>:
InterruptedException - 如果有任何线程中断了当前线程 。抛出此异常时,将清除当前线程的中断状态。
除非睡眠线程实际上被中断,否则不会抛出异常。这是一个代码版本,可以更可靠地测试您正在检查的行为:
Thread targetThread = new Thread() {
@Override
public void run() {
try {
Thread.sleep(5000);
System.out.println("Target thread completed normally");
} catch(final InterruptedException ie) {
System.out.println("Target thread was interrupted");
}
}
};
targetThread.start();
targetThread.interrupt();