线程处于RUNNABLE状态但堆栈跟踪显示它正在处理?

时间:2013-03-05 14:17:27

标签: java multithreading performance stack-trace

为Java应用程序执行 Thread Dump 之后,会显示几个线程快照,如下所示:

Thread t@384
   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)
    .....

几个相同的线程(由线程名称标识)处于完全相同的状态。

F.Y.I。通过JMX进行检查还显示这些线程运行了4个小时。

问题:

如何一个线程处于RUNNABLE状态但是Stack Trace它表明它正在做某事?

我认为RUNNABLE总是意味着线程只是可用来处理任何新任务而不是处理任务。

1 个答案:

答案 0 :(得分:5)

Thread.State.RUNNABLE API:处于可运行状态的线程正在Java虚拟机中执行,但它可能正在等待来自操作系统的其他资源,例如处理器