RunTime.getRunTime().addShutdownHook的用法
今天在阅读Tomcat源码的时候,catalina这个类中使用了下边的代码,不是很了解,所以google了一下,然后测试下方法,Tomcat中的相关代码如下:
Runtime.getRuntime().addShutdownHook(shutdownHook);
这个方法的含义说明:
这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。
测试案例:
package com.spring.sxf.study.springtradedao.java.hook; /** * 打印结果: * JVM开始运行 * JVM开始运行结束 * ==钩子函数执行开始== * 服务名字:远程服务 * 服务代码:abc * ==钩子函数执行结束== */ public class HookTest { private static Server server; public static void main(String[] args) { //JVM实例开始运行 System.out.println("JVM开始运行"); server=new Server("远程服务","abc"); //添加钩子函数 Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { System.out.println("==钩子函数执行开始=="); System.out.println("服务名字:"+server.getName()); System.out.println("服务代码:"+server.getServer()); System.out.println("==钩子函数执行结束=="); } }); //JVM实例关闭 System.out.println("JVM开始运行结束"); } } /** * 测试服务 */ class Server{ private String name; private String server; public Server(String name, String server) { this.name = name; this.server = server; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getServer() { return server; } public void setServer(String server) { this.server = server; } }