2011-03-24 63 views

回答

1

您可以使用Thread.setDefaultUncaughtExceptionHandler()註冊崩潰事件。雖然如果你的整個應用程序崩潰,你不必擔心關閉連接,因爲它們將與應用程序一起被殺死。

+0

this和setUncaughtExceptionHandler()有什麼區別? – Codevalley 2011-03-24 07:06:14

+0

我認爲線程使用的異常處理程序是由'setUncaughtExceptionHandler()'設置的異常處理程序,如果不存在,那麼它將使用'Thread.setDefaultUncaughtExceptionHandler()'(如果存在)。 – 2011-03-24 16:19:54

0

OS內核將關閉所有打開的文件句柄,套接字,分配的內存等等。它不能將緩衝IO內部沖洗到程序中,它只會拆除TCP套接字,而不會向遠程對等端說BYE,但當操作系統收回您的進程時,可以(或需要)做的事情不多。

但是,如果應用程序崩潰而在持久性存儲上留下不一致的數據,則可能需要在下次啓動時進行一些清理。

+0

其實我有我自己的對象被緩存發送到一致的狀態。所以OS可能對我沒有幫助。 – Codevalley 2011-03-24 06:32:29

+0

日誌記錄文件系統將元數據更改寫入磁盤兩次:首先到日誌,然後再到文件系統,然後他們在日誌中設置一個標誌來指示這些更改已成功存儲。當不衛生時,它會掃描日誌並重新應用所有未標記爲成功的更改。如果對象一致或不一致,可以更新對象上的「乾淨」或「髒」標誌,因此在下次啓動時可以刪除不一致的對象。 – sarnold 2011-03-24 06:36:16