很长一段时间以来,我一直在使用以下函数使当前线程休眠一段时间:
class Utils {
static public sleep(int ms) {
try {
Thread.sleep(ms);
} catch(InterruptedException x) {}
}
}
但是由于我默默地忽略了这个异常,我想知道这个函数是否会在某些情况下变得邪恶?
很长一段时间以来,我一直在使用以下函数使当前线程休眠一段时间:
class Utils {
static public sleep(int ms) {
try {
Thread.sleep(ms);
} catch(InterruptedException x) {}
}
}
但是由于我默默地忽略了这个异常,我想知道这个函数是否会在某些情况下变得邪恶?
如果您没有在自己的代码中使用中断,则应通过以下方式保持中断状态:
catch(InterruptedException x) {
Thread.currentThread.interrupt();
}
或者你可以通过投掷来处理它InterruptedException
。这会立即让调用者知道存在中断,否则可以稍后使用 isInterrupted() 进行检查。
如果一定要全部休眠,那么可以在中断后继续休眠,之后再重新中断线程。请参阅番石榴的Uninterruptibles.sleepUninterruptibly
实现。
通过不清除线程的中断状态,您可以防止您的代码干扰可能使用中断的任何其他内容。因此,如果将来您想中断一个线程,您就不会遇到一些模糊的错误,有时它会起作用,有时却不起作用。
如果您永远不会使用中断,则可以完全忽略它,但最好保持灵活性以防万一。