`

Runtime.addShutdownHook(Thread hook)方法解析

阅读更多

Runtime.addShutdownHook(Thread hook),JDK帮助文档中的解释是:
注册新的虚拟机来关闭钩子,Java虚拟机会为了响应以下两类事件而关闭:
1)程序正常退出,这发生在最后的非守护线程退出时,或者在调用exit方法时;
2)为响应用户中断而终止虚拟机,或发生系统事件,比如用户注销或系统关闭.

关闭钩子hook只是一个已初始化但未启动的线程.虚拟机开始启动其关闭序列时,它会以某种未指定的顺序启动所有已注册的关闭钩子,并让它们同时运行.

该函数的作用就是在你的程序结束前,执行一些清理工作,尤其是没有用户界面的程序.很明显,这些关闭钩子都是线程对象,因此,清理工作要写在run()里.根据JDK帮助文档,清理工作不能太耗时,要尽快结束,但仍然可以对数据库进行操作.
例子:

Java代码 <embed type="application/x-shockwave-flash" width="14" height="15" src="http://riddickbryant.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" lk_media="yes" lk_mediaid="lk_juiceapp_mediaPopup_1252865345343" flashvars="clipboard=%20%20%20%20%2F**%0A%20%20%20%20%20*%20Add%20shutdown%20hook.%0A%20%20%20%20%20*%2F%0A%20%20%20%20private%20void%20addShutdownHook(final%20FtpServer%20engine)%20%7B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20create%20shutdown%20hook%0A%20%20%20%20%20%20%20%20Runnable%20shutdownHook%20%3D%20new%20Runnable()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20public%20void%20run()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20System.out.println(%22Stopping%20server...%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20engine.stop()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20add%20shutdown%20hook%0A%20%20%20%20%20%20%20%20Runtime%20runtime%20%3D%20Runtime.getRuntime()%3B%0A%20%20%20%20%20%20%20%20runtime.addShutdownHook(new%20Thread(shutdownHook))%3B%0A%20%20%20%20%7D%0A" quality="high" allowscriptaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
  1. /**
  2. *Addshutdownhook.
  3. */
  4. private void addShutdownHook( final FtpServerengine){
  5. //createshutdownhook
  6. RunnableshutdownHook=new Runnable(){
  7. public void run(){
  8. System.out.println("Stoppingserver..." );
  9. engine.stop();
  10. }
  11. };
  12. //addshutdownhook
  13. Runtimeruntime=Runtime.getRuntime();
  14. runtime.addShutdownHook(new Thread(shutdownHook));
  15. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics