从java线程转储中理解行

时间:2014-05-22 22:08:40

标签: java multithreading jvm thread-dump jstack

我有以下线程转储,我使用jstack,并想知道单词runnable旁边的十六进制值显示什么。我看到在其他地方使用的相同值显示为:

waiting on condition [0x00000000796e9000]

这是否意味着其他线程正在等待此线程?

runnable [0x00000000796e9000]

线程转储

"ajp-bio-8009-exec-2925" daemon prio=10 tid=0x0000000015ca7000 nid=0x53c7 runnable [0x00000000796e9000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)

1 个答案:

答案 0 :(得分:1)

  

我有以下线程转储,我使用jstack并希望   知道runnable这个单词旁边的十六进制值是什么。我见过   显示为:

的其他地方使用的相同值      

等待条件[0x00000000796e9000]

     

这是否意味着其他线程正在等待此线程?

是。这表示一个线程持有锁,另一个线程正在等待获取该锁。这在概念上非常类似于synchronized关键字,但可以更强大(也更复杂)。 查看condition的javadoc以更好地了解条件。

这个question/answer给出了线程转储(对于java 6)中的属性的描述。