我遇到了ThreadPoolExecutor問題。它可以正常工作數小時,但有時(隨機時間,有時在2分鐘或3小時後),它會停止執行提交的任務,程序將掛起。Java ThreadPoolExecutor在一段時間後停止工作
隊列已滿並且此時所有的corethread都處於活動狀態。
我根本不知道這是從哪裏來的。特別是因爲它有時會工作3個小時,而所有的核心線程一直在工作。
如果有人對我有建議,我會很高興。
我遇到了ThreadPoolExecutor問題。它可以正常工作數小時,但有時(隨機時間,有時在2分鐘或3小時後),它會停止執行提交的任務,程序將掛起。Java ThreadPoolExecutor在一段時間後停止工作
隊列已滿並且此時所有的corethread都處於活動狀態。
我根本不知道這是從哪裏來的。特別是因爲它有時會工作3個小時,而所有的核心線程一直在工作。
如果有人對我有建議,我會很高興。
我有一個類似的問題,執行下載網頁的I/O操作的代碼。有時候,有時在幾分鐘或幾小時內,一個線程會掛起一些I/O操作並停止工作。
如果這是你的情況,請設置一箇中止時間。
在調試器中運行代碼,當應用程序停止時,請查看線程執行的最後一個方法。
以look at the stack dump.這將告訴你線程是否處於某個阻塞操作中,等待一個永不發生,工作或真正死鎖的情況。
你可能有內存泄漏的地方,這是一個幾個小時
它可能如果你使用的JVM的舊版本可能與http://bugs.sun.com/view_bug.do?bug_id=6822370後引起的鎖。這是固定在6月18日。見http://www.oracle.com/technetwork/java/javase/6u18-142093.html
這是一個僵局。那麼線程之間共享什麼代碼? redneck調試:嘗試在調試模式下運行你的應用程序,並等待它鎖定,連接調試器並暫停jvm,然後你可以看到你的線程在哪一點。 –
如果您懷疑存在死鎖,請轉儲所有線程的堆棧跟蹤。在Windows上,這是通過按Control-Break完成的。看看線程已經同步了什麼以及他們在等什麼。 –
不一定是僵局。 – erickson