According to the Java Tutorials, "if the thread executing the try
or catch
code is interrupted or killed, the finally
block may not execute even though the application as a whole continues."
Here's the full passage:
The finally
block always executes when the try
block exits. This
ensures that the finally
block is executed even if an unexpected
exception occurs. But finally
is useful for more than just exception
handling — it allows the programmer to avoid having cleanup code
accidentally bypassed by a return
, continue
, or break
. Putting cleanup
code in a finally
block is always a good practice, even when no
exceptions are anticipated.
Note: If the JVM exits while the try
or catch
code is being executed, then
the finally
block may not execute. Likewise, if the thread executing
the try
or catch
code is interrupted or killed, the finally
block may
not execute even though the application as a whole continues.
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();
It prints - finally executed
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…