我知道當沒有其他非守護進程線程處於活動狀態時,所有守護進程線程都應該被終止。 我正在開發從靜態對象獲取數據的小程序。這些靜態對象正在守護進程線程中從遠程服務器下載一些數據。幾個applet可以訪問相同的數據,所以對每個applet運行線程都沒有意義。 問題是我重新加載頁面時。小程序正在重新加載,並且它們在這些靜態對象中註冊,除了JVM殺死守護進程線程之外,一切都會很好。Java在applet重新加載中殺死守護進程線程
也許我一步解釋步驟:
- Applet是裝載和它在靜態對象,它提供數據寄存器。
- 靜態對象啓動守護進程線程。
- 頁面重新加載。
- 小程序正在卸載(stop()和destroy()被調用)
- 新的applet實例正在創建並在靜態對象中註冊。
- JVM在守護程序線程中拋出ThreadDeath,通信停止。
在我看來,第6步應該是在4之前和之前5. 我是否錯過了什麼?
我開發的解決方法是在註冊靜態對象之前先休眠一段時間,讓JVM殺死守護進程,然後創建自動守護進程,但這只是一種解決方法。有沒有更好的解決方案?
因爲可以有另一個applet實例或其他對象等待來自服務器的數據。問題在於當守護進程被JVM殺死的時候不是爲什麼。 – BeginEnd 2011-04-20 10:04:44