很多时候,我们需要在程序退出前执行特定的过程,比如关闭连接、解除端口绑定等,而我们却并不清楚程序在什么时候结束,
假如有析构方法,一切问题似乎就迎刃而解了,遗憾的上Java中并没有C++中的析构,Java中有析构方法,但是JVM不能保证
在程序退出前一定会执行,所以我们需要寻求其他的解决办法。
对当前应用程序对象的获得,Java通过Runtime静态方法:Runtime.getRuntime()通过Runtime的 void
addShutdownHook(Thread hook) 法向Java虚拟机注册一个shutdown钩子事件,这样一旦程序结束事件到来时,
就运行线程hook,此方法只针对正常结束的程序。下面是详细的代码:
package com.demo;
import java.util.Scanner;
public class DestroyDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Test t= new Test();
while (true){
Scanner sc= new Scanner(System.in);
String st = sc.nextLine();//获取输入信息
if (st.equals("exit")){
System.exit(0);
}
}
}
}
class Test{
Thread t = new Thread(new Runnable(){
@Override
public void run() {
// TODO 自动生成的方法存根
for (int i=0;i<10;i++){
System.out.println("整在清理资源"+i);
}
}
});
public Test(){
Runtime.getRuntime().addShutdownHook(t);
}
}
当输入exit后,程序会自动结束,这个时候就会执行线程t