2013-01-11 24 views
6

我調試遺留的Java應用程序,並且線程轉儲(通過jstack獲得)中包含類似下面的一些條目:如何解釋在RUNNABLE但沒有堆棧跟蹤的Java線程?

"Thread-8" prio=10 tid=0x0000000055f2c800 nid=0x49bf runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

就是這樣。沒有堆棧跟蹤。

這是怎麼回事?如何找到在此線程中執行的Java代碼?

+0

爲什麼你發佈這個評論而不是答案? – noahlz

+0

線程的名稱完全沒有幫助;他們應該始終正確地命名線程。 – irreputable

+0

@noahz:我對此沒有足夠的信心。我做了一個答案,我們會看看社區是否喜歡它。 –

回答

3

線程沒有(或沒有)執行Java代碼。它的處理任務沒有在Java中實現,也沒有被任何Java調用者直接請求。例如,如果相應的OS線程剛剛捕獲了一個信號。

+1

也許這些是由於'jstack'本身執行的theads?我可以向jstack添加一個標誌來顯示本機框架嗎? – noahlz

+0

Java應用程序通過啓動本機Linux線程的JNI調用到C庫中。 – noahlz