为什么不抓住打印?

时间:2013-06-07 11:20:14

标签: java exception try-catch thread-sleep

try {
Thread.sleep(1000);
} catch(InterruptedException e) {
System.out.println("Interrupted, NOT PRINTED");
}
System.out.println ("This statement is printed");

在这段代码中,sleep会抛出一个interrupttedexception但是这不会在输出中打印catch语句。为什么?

1 个答案:

答案 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();