当前位置: 首页 > 面试题库 >

为什么要捕获InterruptedException来调用Thread.currentThread.interrupt()?

漆雕唯
2023-03-14
问题内容

在有效的Java(第275页)中,有以下代码段:

...
for (int i = 0; i < concurrency; i++) {
  executor.execute(new Runnable() {
    public void run() {
    ready.countDown();
    try {
      start.await();
      action.run();
    } catch (InterruptedException e) {
      Thread.currentThread().interrupt();
    } finally {
      done.countDown();
    }
  }
}
...

捕获中断异常以重新引发它有什么用?为什么不让它飞呢?


问题答案:

简单的答案是,这InterruptedException是一个检查的异常,它不在Runnable.run方法(或Executable.execute()方法)的签名中。所以你必须抓住它。一旦发现它,Thread.interrupt()建议您设置为设置中断标志。除非您确实打算压缩中断。



 类似资料:
  • 问题内容: 作为标题。 捕获“ InterruptedException”后,为什么“ Thread.currentThread()。isInterrupted()”的值为false? 问题答案: 在Javadoc中(由调用): InterruptedException-如果任何线程中断了当前线程。引发此异常时,将清除当前线程的中断状态。 我认为的目的是让您 在 调用可能引发的事件 之前 检测线程

  • 问题内容: 引用:通配符捕获帮助器方法 它说创建一个辅助方法来捕获通配符。 仅在下面使用此函数不会产生任何编译错误,并且似乎以相同的方式工作。我不明白的是:您为什么不只使用它而避免使用帮助器? 我以为这个问题可以归结为:通配符和泛型有什么区别?所以,我去了:通配符和泛型之间的区别。它说要使用类型参数: 1)如果要对不同类型的方法参数强制执行某种关系,则不能使用通配符来实现,必须使用类型参数。 但是

  • 我很困惑,无法理解为什么不应该吞掉InterruptedException。 IBM的文章说 当阻塞方法检测到中断并抛出InterruptedException时,它将清除中断状态。如果捕捉到InterruptedException,但无法重新抛出它,则应保留中断发生的证据,以便调用堆栈上更高的代码能够获悉中断,并在需要时对其做出响应 还请解释一下上面的规则?

  • 问题内容: 最近,我们在Java服务器应用程序中遇到了一个问题,该应用程序正在抛出未捕获的错误,因为Error是Throwable的一个单独的子类,而我们仅捕获了Exceptions。 我们通过捕获Throwables而不是Exceptions解决了眼前的问题,但这使我思考为什么您要捕获Exceptions而不是Throwables,因为您随后会错过Errors。 那么, 当您可以捕获Throwa

  • 我必须用一些代码来回答这个问题: 假设我编写了以下方法规范: 您正在为一个将使用此方法的数据库程序编写代码,并且希望专门处理每个程序。try/catch子句应该是什么样的 您可以对catch子句内容使用no-ops——空块{}<我们只对这里语句的语法和结构感兴趣。 我回答说: 出于这个原因,他没有接受这个答案: “你的catch子句顺序不对。你能解释一下为什么顺序很重要吗?” 他的回答正确吗?

  • 问题内容: 我的系统是ubuntu 12.04。我从修改了示例,并添加了示例。但是生成时我无法获得输出。 是一个错误吗?源代码的片段如下: 问题答案: 请参阅此答案以及该答案以获取详细说明。仔细阅读signal(7)和signal-safety(7)。也请记住,虚拟地址空间的的过程中是常见的,和之间,所有的共享线程是进程。另请参见proc(5)(并使用pmap(1)),并尝试 从您的进程内部进行读