Shutdown Hook
为了避免用户不正当的关闭tomcat(比如直接关掉控制台或ctrl+c),tomcat使用了Shutdown Hook。
java程序结束的条件:
1,system.exit或,所有线程执行结束。
2,强制关闭比如ctrl+c
解决办法:
1,预先设置Shutdown Hooks,在java程序关闭时会单起n个线程同时执行所有Shutdown Hooks。
2,执行未执行过的finalizers。
我们使用第一种解决办法。那么就需要做:
1,写一个继承Thread类的hook类
2,填充它的run方法
3,实例化这个hook类
4,把这个实例加入到runtime的hook中
在tomcat中,hook类被写成了Catalina的inner class。在start方法中把它设进了runtime。但当server的await方法返回时,或用shutdown.bat终止程序时,也就是正常终止时,在程序中会把这个hook remove掉。