做一个爱护环境,热爱资源的程序员,在使用应用程序后,记录及时释放资源,在阅读LTS源码时,发现了Runtime.addShutdownHook()的用法,稍微记录一下。使用该方法可以给当前JVM注册一个关闭挂勾线程,在程序退出时,会执行这个关闭挂勾线程,而这个时间点,最适合进行资源的释放工作。
以下直接看实例代码:
/*
* JVM虚拟器关闭挂勾:在JVM关闭时,触发执行:一般用于资源释放。
* 在2种情况下,会执行关闭挂勾:
* 1.程序退出,就是程序执行完成(最后一个非守护线程退出);
* 2.执行了System.exit()方法,退出程序;
* 注意:直接kill进程不会执行关闭挂勾的。
* *
*/
public class AddShutDownHook {
public static void main(String[] args) throws InterruptedException {
System.out.println("主线程运行.....等我5s......");
Thread.sleep(5000);
//程序退出之前会执行关闭挂勾
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("别着急关闭,等我先执行完。");
}
}));
//System.exit(0); //也会执行关闭挂勾
System.out.println("主线程运行完毕。");
}
}