2010-04-05 144 views
1

我在RHEL OS中的1.5 Java VM中運行J2SE應用程序。該應用程序的任務之一是在啓動過程中創建3個無限運行的用戶線程。目的是檢查後端數據庫表中特定類型的請求並執行相應的操作。Java線程突然停止運行

正如我們觀察到,長期運行的線程突然停止運行,但仍是應用還活着,JVM過程可以看出,在PS英法| grep的java的

能有人扔爲什麼被創建的線程光以無限循環運行,突然停止?關於如何檢測這個問題和可能的解決方案的任何想法都會有很大的幫助

與問候, 克里希納

+0

這聽起來像是死鎖的經典描述 – 2010-04-05 15:52:05

回答

5

我建議發送Ctrl+Break到您的應用程序,傾倒螺紋和分析輸出。也許你的線程正在等待一些輸入(IO)。也許他們僵持不下。也許他們已經退出了一個未捕獲的異常。線程轉儲會告訴你發生了什麼事(如果你事先命名你的線程,這可以幫助你在轉儲中識別它們)。

+0

線程轉儲絕對是解決這類問題的方法。不知道你的線程是什麼?轉儲他們的狀態。分析他們是否都在等待相同的鎖定/被阻止在相同的位置。 – 2010-04-05 15:52:49

3

也許你有未處理的異常。

首先,您應該記錄所有線程活動(您可以使用log4j來實現此目的)。

您還可以重寫ThreadGroup類的uncaughtException方法,併爲由於未捕獲的異常而導致線程死亡時創建警報。