如何在关闭时进行清理工作

我们常常会遇到这样的情况,当程序运行结束的时候,要将一些资源连接进行清理,释放内存,或者是删除一些临时文件。通常这并不会有什么问题,我们只需要在程序的结束部分写上清理代码即可。

但当我们处在多线程的环境下时,我们并不能确切的知道,何时所有的线程都已结束工作,程序准备退出。 又或者我们的程序中有一些守护线程,需要通过特殊的命令才能停止。那么此时,我们如何才能保证当所有的线程都结束,程序退出的时候,我们的清理代码被执行呢?

在Java中,有一种非常简单的方法,通过给Runtime提供shutdown hook来实现这样的需求:

        try {
            // Register shutdown hook
            if (useShutdownHook) {
                if (shutdownHook == null) {
                    shutdownHook = new CatalinaShutdownHook();
                }
                Runtime.getRuntime().addShutdownHook(shutdownHook);
            }
        } catch (Throwable t) {
                //TODO
        }

猜你喜欢

转载自mabusyao.iteye.com/blog/1061577