但当我们处在多线程的环境下时,我们并不能确切的知道,何时所有的线程都已结束工作,程序准备退出。 又或者我们的程序中有一些守护线程,需要通过特殊的命令才能停止。那么此时,我们如何才能保证当所有的线程都结束,程序退出的时候,我们的清理代码被执行呢?
在Java中,有一种非常简单的方法,通过给Runtime提供shutdown hook来实现这样的需求:
try { // Register shutdown hook if (useShutdownHook) { if (shutdownHook == null) { shutdownHook = new CatalinaShutdownHook(); } Runtime.getRuntime().addShutdownHook(shutdownHook); } } catch (Throwable t) { //TODO }