我已经Thread.sleep
出于各种不同的原因使用了,但是我从未理解的一件事是在这个try/catch块期间会发生异常:
try {
Thread.sleep(1000); // sleep for 1 second.
} catch (Exception x) {
fail("Failed due to an exception during Thread.sleep!");
x.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
计算机内实际发生异常的原因是Thread.sleep
什么?我最好的猜测是,系统时钟可能只有一次"跳过一个节拍",如心跳,但这种情况经常发生..
所以从本质上讲,我的问题是:执行时Thread.sleep
,内部必须发生什么#sleep
才能抛出异常?
如果您查看JavaDoc,Thread.sleep()
您会看到可能发生的情况:
抛出:
IllegalArgumentException - 如果millis的值为负
InterruptedException - 如果任何线程已中断当前线程.抛出此异常时,将清除当前线程的中断状态.
有关如何中断另一个线程的示例可能如下所示:
public class Foo {
public static void main(final String[] args) throws Exception {
Thread sleepThread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
System.out.println("Interrupted!");
}
}
});
sleepThread.start();
Thread.sleep(500);
sleepThread.interrupt();
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印
中断!