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>
-
-
-
-
private
void
addShutdownHook(
final
FtpServerengine){
-
-
-
RunnableshutdownHook=new
Runnable(){
-
public
void
run(){
-
System.out.println("Stoppingserver..."
);
-
engine.stop();
-
}
-
};
-
-
-
Runtimeruntime=Runtime.getRuntime();
-
runtime.addShutdownHook(new
Thread(shutdownHook));
-
}
分享到:
相关推荐
JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1)程序正常退出 2)使用System.exit() 3)终端使用Ctrl+C触发的...
Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { try { server.stop(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); } Or ...
SpringBoot Rest与以下库中的JVM Futures结合 ... Runtime.getRuntime().addShutdownHook(new Thread(SpringBootFuturesSimulation::shutdown)); new SpringApplicationBuilder(SpringWebFuturesAppl
1 增加线程池consumer优雅退出机制Runtime.getRuntime().addShutdownHook 2 修改部分log输出方式,将原来的 log.info("exceptin:" + e) 修复为 log.info("exception: ", e) 20161227 更新 1 bug fix: 将...
RMI泥浆 跑步 make mud rmiregistry java src.MUDServerMainline <registry> ... 处理用户离开/加入服务器或 MUD,使用MUDServerMainline的shutdownhook MUDServerMainline和服务器端方法playerDisconnect