2

查看线程转储,我看到几个 BLOCKED 线程,但有些“等待锁定”,有些“等待”,而只有一个 RUNNABLE 线程可能获得了锁定。我的问题是为什么有些“等待锁定”而其他“等待”?此外,“等待”的线程似乎有锁,但不是实际持有锁的 RUNNABLE 线程,因为它说它锁定了堆栈跟踪中较低地址的对象,那么如果它有锁,为什么它会阻塞(或者它没有锁)?

以下示例: 锁定对象位于 0x00000000c2ad4be8

等待

"ajp-bio-10032-exec-15" daemon prio=10 tid=0x00007f888c02d000 nid=0x74c8 in Object.wait() [0x00007f8821792000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000000c2ad4be8> (a java.lang.Object)
    at java.lang.Object.wait(Object.java:503)
    at com.tibco.tibjms.TibjmsxLinkTcp.disconnect(TibjmsxLinkTcp.java:1026)

等待锁定

"ajp-bio-10032-exec-95" daemon prio=10 tid=0x00007f888c089800 nid=0x1e66 in Object.wait() [0x00007f881df4b000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000000c2ad4be8> (a java.lang.Object)
    at java.lang.Object.wait(Object.java:503)
    at com.tibco.tibjms.TibjmsxLinkTcp.disconnect(TibjmsxLinkTcp.java:1026)
    - locked <0x00000000c2ad4be8> (a java.lang.Object)
    at com.tibco.tibjms.TibjmsConnection._close(TibjmsConnection.java:2430)

最后是 RUNNABLE 线程

"ajp-bio-10032-exec-142" daemon prio=10 tid=0x00007f888c0b7000 nid=0x3657 runnable [0x00007f88167d4000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:713)
    - locked <0x00000000f022c5e0> (a com.tibco.tibjms.TibjmsxLinkTcp$LinkReader)
    at com.tibco.tibjms.TibjmsxLinkTcp.start(TibjmsxLinkTcp.java:968)
    - locked <0x00000000c2ad4be8> (a java.lang.Object)
4

0 回答 0