这就是我在做什么:

Stopwatch stopWatchToCheckTimeout;

void checkShutDown() throws InterruptedException {
  if (stopWatchToCheckTimeout.elapsed() >= MAX_GRACEFUL_TIMEOUT_DURATION) {
    throw new InterruptedException("Time to shut down now!");
  }
}

public Void mainFancyMethod() {
   try {
     while(true) {
       checkShutDown();
       // do fancy work
     }
   } catch (InterruptedException ex) {
     log.debug("Shutting down gracefully");
   }
   return null;
}

java/lang/InterruptedException文档中,我不清楚,按照标准,它应该是另一个应该中断的线程,还是可以让一个线程自己抛出该异常?

在此用例中抛出的最佳例外是什么?

最佳答案

似乎您在使用异常代替控制流。有什么原因不能让checkShutDown返回布尔值吗?

boolean timedOut() {
  return (stopWatchToCheckTimeout.elapsed() >= MAX_GRACEFUL_TIMEOUT_DURATION)
}

10-08 16:52