虚拟机在响应两种事件的时候关闭自己:
1、 当系统System.exit被调用或最后一个非守护线程退出时
2、 用户突然的终止虚拟机.如CTRL+C或退出系统
当虚拟机终止的时候会执行两组相关的事件:
1、 虚拟机启动所有的已注册的shutdown hooks, 如果有的话。
Hooks是在一些在运行时注册的线程。所有的shutdown hooks
同时进行
2、 虚拟机调用所有可能存在的未调用的清理器(finalizer)
这样在tomcat启动的时候调用RunTime的addShutdownHook(Thread hook) ,注入当系统退出时需要执行的线程s