addShutdown钩子的一般合约是
Java虚拟机关闭以响应两种事件:
当最后一个非守护程序线程退出或调用退出(等效,System.exit)方法时,程序正常退出,或者
响应于用户中断(例如,键入^ C)或系统范围的事件(例如用户注销或系统关闭),终止虚拟机.
关闭钩子只是一个初始化但未启动的线程.当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭挂钩,并让它们同时运行.当所有挂钩都完成后,如果启用了finalization-on-exit,它将运行所有未读取的终结器.最后,虚拟机将停止.请注意,守护程序线程将在关闭序列期间继续运行,如果通过调用exit方法启动关闭,则非守护程序线程也将继续运行.
在极少数情况下,虚拟机可能会中止,即停止运行而不会干净地关闭.当虚拟机在外部终止时会发生这种情况,例如Unix上的SIGKILL信号或Microsoft Windows上的TerminateProcess调用.如果本机方法因例如破坏内部数据结构或尝试访问不存在的内存而出错,则虚拟机也可能中止.如果虚拟机中止,则无法保证是否将运行任何关闭挂钩.
因此,在关机期间,Windows机器可能会调用TerminateProcess,因此可能不会调用您的关闭挂钩.
| 归档时间: |
|
| 查看次数: |
4305 次 |
| 最近记录: |