addShutdownHook的用法

addShutdownHook作为一个正常关闭Java程序的途径,其实是非常有用的。

 

JDK文档可知,当程序正常退出,或者为响应用户中断而终止虚拟机的时候,就会调用里面的线程,来作最后的退出处理。

 

ShutdownHook只是一个已初始化但为启动的线程。当JVM开始执行关闭序列时,它才开始已某种随机程序注册和并行执行shutdown hooks。这是关闭Java程序的一个重要的途径。在shutdown hooks里,可以执行各种关闭和释放资源的方法,例如:

 

    private void setupShutdownHook(final Initiator initiator) {



        Runtime.getRuntime().addShutdownHook(new Thread() {



            @Override

            public void run() {



                log.info("Shutting down the service... ");



                initiator.stop();



                journalEventHandler.clear();

                ticDbApp1EventHandler.clear();

                ticDbApp2EventHandler.clear();



                cdl.countDown();



                log.info("The Application is shutdown!");



            }

        });



    }

 

 举个栗子,如果是使用了BufferedWriter但是没有在最后执行flush()和close()的方法,很可能就会导致数据丢失。所以在shutdown hooks里面,执行这类型的关闭方法,非常重要。

 

在linux/unix下,Ctrl+C或者kill -15都可以;遗憾的是在Eclipse中无法实现。

 

参考:

http://docs.oracle.com/javase/1.5.0/docs/guide/lang/hook-design.html

http://stackoverflow.com/questions/191215/how-to-stop-java-process-gracefully

本文完

 

你可能感兴趣的:(shutdown)