当一个JVM-ran(实际上写在Scala中,但我倾向于认为该解决方案与Groovy,Clojure或纯Java几乎相同)时,我的控制台程序被用户按下终止Ctrl + C(或通过系统关闭顺序,我不知道程序是否有任何区别),如何确保应用程序修改的外部资源(数据库,文件,Web服务抽象资源)是否处于可预测的非逻辑腐败状态?如何在JVM控制台应用程序中处理^ C?
5
A
回答
7
您通常使用它作为这样:
Runtime.addShutdownHook(new Thread() {
public void run() {
// do your clean up here.
}
});
3
您可以捕获该信号并关闭资源。大多数服务不需要优雅地关闭,但是您写入的文件通常都可以。
只需添加关闭挂钩就可以了。但我会为你的情况测试这个。
10
你可以尝试实施关闭挂钩为他人指出BUT:
在极少数情况下,虚拟机可能会中止,也就是停止 运行没有干净关闭。当虚拟机器在外部终止,例如Unix上的SIGKILL信号 或Microsoft Windows上的TerminateProcess调用时,会发生这种情况。如果本机方法出错,例如, 机器可能会中断,从而破坏内部数据结构或尝试访问不存在的内存。如果虚拟机中止,则不能保证 可以关于是否将运行任何关闭挂钩。
我想,你将不得不将事务性上下文引入你的应用程序我相信。对于非常容易的数据库,对于文件系统,您可以查看Apache Commons Transaction
相关问题
- 1. 如何处理控制台应用程序中的shutdown \ logoff?
- 2. 控制台中的System.Xml的C#错误处理应用程序
- 3. 如何处理在控制台应用程序按键事件
- 4. 如何在Windows CE控制台应用程序中处理Ctrl + C?
- 5. C#,PowerShell和控制台应用程序 - 如何在处理过程中处理输入
- 6. 在控制台应用程序中处理
- 7. 如何获得控制台的进程id在C#控制台应用程序
- 8. 在批处理文件我的控制台应用程序
- 9. 如何在.NET Core控制台应用程序中处理Scoped服务实例?
- 10. C++应用程序中的控制台
- 11. C#控制台应用程序中断?
- 12. C# - 在控制台应用程序
- 13. 在C#控制台应用程序
- 14. 如何在控制台应用程序
- 15. 如何在控制台应用程序
- 16. 如何在C#控制台应用程序中使用IsolatedStorage
- 17. 如何在c#控制台应用程序中使用参数?
- 18. Java控制台应用程序清理
- 19. Dalvik/JVM如何处理多处理的应用程序
- 20. Linux控制台键盘处理程序
- 21. 在C++/cli控制台应用程序中处理停止或退出事件
- 22. 在C#控制台应用程序中处理未捕获的异常
- 23. 如何从控制台应用程序
- 24. 如何在wxWidgets控制台应用程序中处理关键事件?
- 25. 如何在C#控制台应用程序中保存输入
- 26. 如何在控制台应用程序中输入数字c#
- 27. 如何在控制台应用程序c中获取server.Mappath#
- 28. 如何在控制台应用程序中打印值C#
- 29. 如何在Ubuntu中编译C++控制台应用程序
- 30. 控制台应用程序中的错误处理
+1也是保护程序免受停电和系统崩溃的唯一方法。 – josefx 2012-02-03 12:35:45