2012-03-28 94 views
2

假設我有一個對象「A」,它在構造函數中啓動某個進程。一旦對象被釋放,我需要調用一個清理方法(設置爲null或超出其生命範圍)。Java,如何在對象上銷燬進程

問題是java沒有析構函數,並且在對象設置爲null或超出範圍後,並不保證所謂的「finalize」方法正確運行。只有當GC認爲「時間到了」。

另外我不能使用shutdown hook,因爲我的代碼在Java EE服務器上運行,並不是一個簡單的Java SE應用程序,它將一次運行並終止。在這種情況下可以做些什麼?

+0

如果您舉例說明您正在努力實現的目標,那麼我們可能會幫助您爲您的問題提出解決方案或不同方法。 – Marthin 2012-03-28 11:03:38

回答

1

它只是不可能使用Java。

只要GC想要刪除對象,但在程序終止時(不應該在Java EE應用程序中發生),就會調用finalize。

所以唯一的辦法就是自己做。例如,您可以使用ObjectPool,其中對象A的所有實例都存儲在一個列表中(如果需要,還會附加一個時間戳)。當時間到來時(例如通過使用wget & cron的特殊URL觸發),您只需遍歷此列表並銷燬不再需要的每個對象。

這只是一種(非常簡單)的可能方式。