在看公司的代码时,发现一段奇妙的代码。 情景: 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-04-29 10:33:26 发布
在查看公司代码时,遇到CalcManager管理Calc Process的需求,若用户通过特定方式关闭CalcManager,Calc Process无法自动关闭。Java提供addShutdownHook(Thread hook)方法解决此问题,当Java虚拟机退出时会调用hook线程的run方法,还举例Ms Word编辑时临时文件的清理。
1287

被折叠的 条评论
为什么被折叠?



