java – 如果运行该函数的线程中断,finally块是否执行?

前端之家收集整理的这篇文章主要介绍了java – 如果运行该函数的线程中断,finally块是否执行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个具有try / finally部分的功能,并且运行它的线程在try块中被中断,finally块是否在中断实际发生之前执行?

解决方法

According to the Java Tutorials,“如果执行try或catch代码的线程被中断或者被杀死,即使整个应用程序整体继续,finally块可能不会执行.

这是完整的段落:

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();

它打印 – 最后执行

猜你在找的Java相关文章