首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >线程为自己抛出一个InterruptedException是正确的吗?

线程为自己抛出一个InterruptedException是正确的吗?
EN

Stack Overflow用户
提问于 2019-08-30 03:50:25
回答 4查看 66关注 0票数 3

这就是我要做的:

代码语言:javascript
运行
复制
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文档来看,我不清楚根据标准,它是否应该是另一个应该中断的线程,或者一个线程是否可以为自己抛出这个异常?

对于这种用例,抛出的最好的异常是什么?

EN

Stack Overflow用户

发布于 2019-10-02 08:35:54

在您发布的示例中,您不应该抛出InterruptedException

Javadoc for InterruptedException状态:当线程正在等待、休眠或以其他方式占用,并且线程在活动之前或期间中断时抛出。被中断是在运行的线程上调用Thread.interrupt()的结果,而这并不是您发布的代码中发生的事情。

如果你仍然想使用异常来打破你的循环,你应该使用一些其他的异常类型。但是,另一种方法是使check方法返回true/false,并将其用于while循环的条件。因此,不是这样:

代码语言:javascript
运行
复制
try {
    while(true) {
        checkShutDown();
        // do fancy work
    }
} catch (InterruptedException ex) {
    log.debug("Shutting down gracefully");
}

这样做:

代码语言:javascript
运行
复制
while (checkIfSafeToContinue()) {
    // do fancy work
}
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57716929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档