Ere*_*evi 5 java resources jdbc
在 Java 程序中,我有一个单例类,用于保存整个程序使用的数据库连接。
当程序结束时,如何告诉 Java 关闭连接?
我可以在 main 的末尾放置一个 connection.close() 语句,但是如果程序意外结束,例如,由于未捕获的异常或程序中某处的“退出”调用,则不会执行该语句。无论程序如何结束,我如何告诉 Java 关闭连接?
如果可以调用该方法,您可以使用VM 关闭挂钩。System.exit
Runtime.getRuntime().addShutdownHook(new Thread(() -> closeDatabaseConnection()));
Run Code Online (Sandbox Code Playgroud)
如果程序正常退出,关闭钩子也会被调用:
Java 虚拟机关闭以响应两种事件:
- 当最后一个非守护线程退出或
System.exit调用该方法时,程序正常退出,或者- 虚拟机会因响应用户中断(例如键入
^C)或系统范围的事件(例如用户注销或系统关闭)而终止。
但如果发生意外情况,并不能保证它们会运行:
在极少数情况下,虚拟机可能会中止,即停止运行而不完全关闭。当虚拟机从外部终止时会发生这种情况,例如使用
SIGKILLUnix 上的信号或TerminateProcessMicrosoft Windows 上的调用。如果本机方法出现错误,例如损坏内部数据结构或尝试访问不存在的内存,则虚拟机也可能中止。如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。
| 归档时间: |
|
| 查看次数: |
2074 次 |
| 最近记录: |