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

本文完

 

相关文章:

  • 2022-12-23
  • 2021-12-31
  • 2021-09-30
  • 2021-11-08
  • 2022-01-13
  • 2021-11-12
猜你喜欢
  • 2021-07-19
  • 2021-06-20
  • 2022-12-23
  • 2021-08-20
  • 2022-12-23
  • 2021-07-25
  • 2021-06-26
相关资源
相似解决方案