java的sleep函数的典型用法是:
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
不过我觉得这个API设计的有问题,不应该有异常抛出。既然是sleep就不应该抛出InterruptedException,如果是系统异常应该是进程直接异常退出,而不应该把异常丢给sleep,让在API层抛出异常。
试想sleep抓住一个InterruptedException异常,能干什么呢,能有什么补救措施呢?是继续往下执行呢,还是Process.Exit()呢?我们一般意义上如果sleep抓到一个InterruptedException 异常,表示程序进入了不可预测状态,此时能做的最安全的办法就是退出程序,这和sleep内部系统级别杀掉自己是一样的结果,所以与其在这儿抛出异常,不如在一开始出现异常的时候就由系统杀掉自己更直接。
所以我觉得sleep函数API的设计应该就是:
Thread.sleep(long millis)
没有任何异常抛出。
函数返回的唯一条件是设定的时间值到期,否则就是程序崩溃,例如被kill掉。