如果我有一个带有try / finally部分的函数,而运行该线程的线程在try块中被中断,那么在中断真正发生之前,finally块会执行吗?
根据Java指南,“如果执行try
或catch
代码的线程被中断或杀死,则finally
即使整个应用程序继续运行,该块也可能无法执行。”
这是完整的段落:
该
finally
块 始终
在try
退出时执行。这样可以确保finally
即使发生意外异常也可以执行该块。但是,finally
是的不仅仅是异常处理更加有用-
它允许程序员避免不慎被绕过具有清除代码return
,continue
或break
。finally
即使在没有例外的情况下,将清除代码放在块中始终是一个好习惯。注意:
如果在执行try
或catch
代码时JVM退出,则该finally
块可能不会执行。同样,如果执行try
或catch
代码的线程被中断或杀死,则finally
即使整个应用程序继续运行,该块也可能不会执行。
class Thread1 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("finally executed");
}
}
}
…
t1.start();
t1.interrupt();
打印 -最终执行
本文向大家介绍try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?相关面试题,主要包含被问及try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?时的应答技巧和注意事项,需要的朋友参考一下 finally 一定会执行,即使是 catch 中 return 了,catch 中的 return
问题内容: 这个问题的目的 是JVM如何保证finally块的执行 (前提是JVM不会崩溃并且线程不会中断或退出)。 在面试问题的提示下,我试图了解JVM如何确保即使在奇怪的情况下也可以执行finally块。请考虑以下代码: 尽管这可能是一个奇怪的情况,但是即使未明确处理“ 其他异常”, 仍可以保证执行finally块。JVM如何处理这种情况? 我的想法: 据我到目前为止的了解和了解,当遇到未处理
问题内容: 根据Java语言规范的第§14.20.2节 通过首先执行try块来执行带有finally块的try语句。然后有一个选择: 如果try块的执行正常完成,则执行finally块,然后可以选择: 如果finally块正常完成,则try语句正常完成。 如果finally块由于原因S突然完成,则try语句由于原因S突然完成 如果我正确地解释了它,那么在执行try块之后最终会被调用,但是所有这些如
问题内容: 即使执行catch块并抛出第二个Exception,也会在此代码中进行设置? 问题答案: 是的,finally块始终运行…除非以下情况: 运行try-catch-finally块的线程被杀死或中断 你用 基础虚拟机以其他方式被破坏 基础硬件在某种程度上无法使用 另外,如果您的finally块中的方法抛出未捕获的异常,则此后将不执行任何操作(即,该异常将像在其他任何代码中一样被引发)。发
问题内容: 考虑到此代码,我是否可以绝对确定该块始终执行,无论它是什么? 问题答案: 是的,将在执行或代码块后调用。 唯一不会被调用的时间是: 如果您调用 System.exit() 如果您调用 Runtime.getRuntime().halt(exitStatus) 如果JVM首先崩溃 如果JVM在try或catch块中达到了无限循环(或其他不间断,不终止的语句) 操作系统是否强行终止了JVM
问题内容: 在下面的代码中,我使javascript在与主要线程不同的线程中运行。该脚本是一个无限循环,因此需要以某种方式终止。怎么样? 脚本开始运行后,调用.cancel()无效。但是,如果我在线程初始化之后立即调用.cancel(),它将终止它(注释行)。 问题答案: 与Java一样,JavaScript(在Nashorn下)也不会像Java那样在紧密循环中响应中断。该脚本需要轮询中断并自动终