前言
Runtime.getRuntime().addShutdownHook(shutdownHook);
这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。
测试代码:
/**
* jvm关闭时的执行钩子函数测试
*/
@Test
public void shutDownHookTest() {
Thread thread1 = new Thread(() -> System.out.println("thread1 start...."));
Thread thread2 = new Thread() {
@Override
public void run() {
System.out.println("thread2 start.....");
}
};
// 定义jvm关闭时的钩子线程函数
Thread shutDownThread = new Thread() {
@Override
public void run() {
System.out.println("钩子函数-系统服务停止....");
}
};
// 这个方法的意思就是在jvm中增加一个关闭的钩子,
// 当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,
// 当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作
Runtime.getRuntime().addShutdownHook(shutDownThread);
// 启动线程测试
thread1.start();
thread2.start();
// 输出结果:无论是thread1在前还是thread2在前,jvm关闭时,都是shutDownThread最后执行。
}