前段時間調試代碼,總是遇到壹個問題:用的是 eclipse 3.6.2 的 32 位版本,配置的 tomcat 是 7.0.47-x86,每次啓動 tomcat 時我都是使用的 debug 模式,這樣能夠方便的下斷點而且進行調試。結果發現每過壹段時間,程序就會掛起,查看 eclipse 時提示代碼的當前控制跳轉到了類 java.util.concurrent.ThreadPoolExecutor 的 processWorkerExit() 方法的 finally block 處,很困惑,以下圖所示。 java
在網上找了下,有網友指出這是由於上述代碼中,在 try 的部分有異常沒有被捕獲,又沒有 catch exception 的代碼塊,致使線程直接跳到了 finally 部分,就會把程序掛起。解決的辦法也很簡單,在 eclipse 裏面設置下便可,操做步驟以下:在 eclipse 主界面上依次選擇菜單 [Window]->[Preference]->[Java]->[Debug],在右邊的菜單中將複選框 [Open popup when suspended on exception] 前面的勾去掉便可。以下圖: tomcat
不過上述解決方法其實只是壹個臨時的解決方法,根本的緣由在於代碼中有部分細節的實現沒有考慮清楚,致使多個線程之間的調度存在某種衝突,所以致使異常的產生,我認爲最好的解決辦法就是把代碼裏的問題修復下,找到根本緣由,纔是終極方案。因爲上述問題實際掛起是在方法 runWorker() 的代碼中,所以咱們能夠考慮在方法 runWorker() 中手動添加上 catch exception 的代碼,而後將捕獲的異常堆棧打印出來,並定位到真正出問題的代碼行。 eclipse