java:Runtime.getRuntime().addShutdownHook 捕获代码被结束时异常

问题描述:

代码有时候被杀掉,但是杀掉的时候需要去执行一些必要的操作,例如保存文件,java 提供了相应的方法 Runtime.getRuntime().addShutdownHook 。

1.贴一个例子
public class GetRunKill {
    public static void main(String[] args) {

        Runtime runtime = Runtime.getRuntime();
        runtime.addShutdownHook(new Thread("") {
            @Override
            public void run() {
                System.out.println("代码被kill");
            }
        });

        for (int i = 0; i < 100; i++) {
            System.out.println(i);
            try {
                System.out.println("******* sleep for 5 second *******");
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

在 linux 上查询进程号,然后 kill 掉该进程,代码会调用 Runtime.getRuntime().addShutdownHook 中的 run 方法,显示为

******* sleep for 5 second *******
6
******* sleep for 5 second *******
7
******* sleep for 5 second *******
8
******* sleep for 5 second *******
9
******* sleep for 5 second *******
代码被kill

2.Tips

1.linux 服务器上杀掉进程的时候,kill ***(进程号) 可以被Runtime捕获,kill -9 是不能被捕获的。
2.Runtime.getRuntime().addShutdownHook 必须得在执行线程的前面声明,在后面声明是无效的。

发布了76 篇原创文章 · 获赞 46 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qingquanyingyue/article/details/88235036