很长一段时间以来,我一直在使用以下函数让当前线程休眠一段时间:
class Utils {
static public sleep(int ms) {
try {
Thread.sleep(ms);
} catch(InterruptedException x) {}
}
}
但是因为我很容易忽略异常,我想知道是否会出现这种情况会变成邪恶的情况?
答案 0 :(得分:7)
如果您没有在自己的代码中使用中断,则应将中断状态保持为:
catch(InterruptedException x) {
Thread.currentThread.interrupt();
}
或者你可以通过投掷InterruptedException
来更高层次地处理它。这会立即让调用者知道有一个中断,否则可以在以后使用isInterrupted()进行检查。
如果您必须全天休眠,那么您可以在中断后继续休眠,然后重新中断线程。请参阅guava的Uninterruptibles.sleepUninterruptibly
以了解此实现。
如果不清除线程的中断状态,则会阻止代码干扰可能正在使用中断的任何其他内容。因此,如果将来你想要中断一个线程,你就不会有一些模糊的错误,有时候它会起作用,有时却没有。
如果你永远不会使用中断,可能会完全忽略它,但为了以防万一,保持灵活性是很好的。