1

很长一段时间以来,我一直在使用以下函数使当前线程休眠一段时间:

class Utils {

static public sleep(int ms) {
  try {
     Thread.sleep(ms);
  } catch(InterruptedException x) {}
}

}

但是由于我默默地忽略了这个异常,我想知道这个函数是否会在某些情况下变得邪恶?

4

1 回答 1

7

如果您没有在自己的代码中使用中断,则应通过以下方式保持中断状态:

catch(InterruptedException x) {
    Thread.currentThread.interrupt();
}

或者你可以通过投掷来处理它InterruptedException。这会立即让调用者知道存在中断,否则可以稍后使用 isInterrupted() 进行检查。

如果一定要全部休眠,那么可以在中断后继续休眠,之后再重新中断线程。请参阅番石榴的Uninterruptibles.sleepUninterruptibly实现。

通过不清除线程的中断状态,您可以防止您的代码干扰可能使用中断的任何其他内容。因此,如果将来您想中断一个线程,您就不会遇到一些模糊的错误,有时它会起作用,有时却不起作用。

如果您永远不会使用中断,则可以完全忽略它,但最好保持灵活性以防万一。

于 2012-11-29T16:22:57.310 回答