在看公司的代码时,发现一段奇妙的代码。 情景: 1) CalcManager 用command line运行。他能够产生Calculator Process。 2) Calculator Process Sevice进程, 以Window 进程的形式存在。 需求: CalcManager 能够管理他生长的Calc Process。 也就是说CalcManagerShutdown的时候Calc Process也要能自动Shutdown。 如果我们提供一个exit的button在GUI上面的话 上面实现起来非常顺, 在exit 的action上先Shutdown这些Calc Process 然后在 System.exit(0), 但是假如用户不小心在Command 窗口上按了Ctrl + c的话或者在Task Manager上killCalcManager进程的话,那么 Kill Calc Process这个机会就没有。 Java提供了这个问题的解决方案public void addShutdownHook(Thread hook)。 当java虚拟机推出的时候回调用hook Thread里面的run方法,也就是运行那个hook线程。 Hook经常被叫着钩子方法。 其实这种应用也不少。 想Ms Word 在编辑时 都会Open一个临时文件,不知道大家有没有注意。我们可以试试通过Task Manager去Kill Word的进程, 这时这个临时文件应该也会被Clean掉的。 详细可以看这片文章
http://www.onjava.com/pub/a/onjava/2003/03/26/shutdownhook.html#listing1
Runtime.getRuntime().addShutdownHook(new ShutdownThread()) Hook方法。
最新推荐文章于 2024-03-29 09:57:11 发布