在有效的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)),并尝试 从您的进程内部进行读