採取線程轉儲的Java應用程序後,多個線程是出現在以下狀態:線程處於RUNNABLE狀態,但堆棧跟蹤顯示正在處理?
Thread [email protected]
java.lang.Thread.State: RUNNABLE
at xmlpdf.text.Word.allocateArrays(Word.java:205)
at xmlpdf.text.Word.calculateWidth(Word.java:237)
at xmlpdf.text.TextFormatter.format(TextFormatter.java:167)
at xmlpdf.text.TextFormatter.formatToWidthImpl(TextFormatter.java:116)
at xmlpdf.text.TextBlock.formatToWidthImpl(TextBlock.java:71)
at xmlpdf.tables.TextCell.formatToWidthImpl(TextCell.java:45)
at xmlpdf.tables.Cell.formatToWidth(Cell.java:349)
at xmlpdf.tables.Row.assignCellWidths(Row.java:97)
at xmlpdf.tables.Table.layout(Table.java:354)
at xmlpdf.tables.Table.formatRowsToWidth(Table.java:329)
at xmlpdf.tables.Table.formatToWidthImpl(Table.java:373)
at xmlpdf.Block.formatToWidth(Block.java:57)
at xmlpdf.renderer.Page.formatWidthAndHeight(Page.java:200)
at xmlpdf.renderer.Page.addBlockWhichIsNotFooterWholePagesOnly(Page.java:1026)
.....
反覆線程轉儲(由線程名稱標識)中完全相同的狀態顯示這些相同的主題。通過JMX檢查還顯示這些線程正在運行4個小時。
問:
線程如何能夠在可運行狀態,但堆棧跟蹤它表明它是做什麼(在這種情況下,一些在xmlpdf類)?
我認爲RUNNABLE總是意味着,線程可用於處理任何新的任務。
'RUNNABLE'指線程正在執行,它位於[javadoc](http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.State.html)中。 – 2013-03-05 14:20:56
我希望一個線程執行被稱爲RUNNING而不是..RUNNABLE似乎暗示 - 它可以運行,如果需要的話。 – Jasper 2013-03-07 07:12:24