當一個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