这就是我要做的:
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文档来看,我不清楚根据标准,它是否应该是另一个应该中断的线程,或者一个线程是否可以为自己抛出这个异常?
对于这种用例,抛出的最好的异常是什么?
发布于 2019-10-02 08:35:54
在您发布的示例中,您不应该抛出InterruptedException。
Javadoc for InterruptedException状态:当线程正在等待、休眠或以其他方式占用,并且线程在活动之前或期间中断时抛出。被中断是在运行的线程上调用Thread.interrupt()的结果,而这并不是您发布的代码中发生的事情。
如果你仍然想使用异常来打破你的循环,你应该使用一些其他的异常类型。但是,另一种方法是使check方法返回true/false,并将其用于while循环的条件。因此,不是这样:
try {
while(true) {
checkShutDown();
// do fancy work
}
} catch (InterruptedException ex) {
log.debug("Shutting down gracefully");
}这样做:
while (checkIfSafeToContinue()) {
// do fancy work
}https://stackoverflow.com/questions/57716929
复制相似问题