问题描述:
代码有时候被杀掉,但是杀掉的时候需要去执行一些必要的操作,例如保存文件,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 必须得在执行线程的前面声明,在后面声明是无效的。