&引用;“等待”;vs";“等待锁定”;vs";“锁定”;在java线程转储中

&引用;“等待”;vs";“等待锁定”;vs";“锁定”;在java线程转储中,java,multithreading,locking,stack-trace,blocked-threads,Java,Multithreading,Locking,Stack Trace,Blocked Threads,通过线程转储查看,我看到了几个被阻塞的线程,但有些线程“正在等待锁定”,有些线程“正在等待”,而只有一个可运行线程可能已经获得了锁定。我的问题是,为什么有些人“等待锁定”,而另一些人“等待”?另外,“等待”的线程似乎有锁,但不是实际持有锁的可运行线程,因为它说它在堆栈跟踪的较低地址锁定了对象,那么如果它有锁(或者没有锁),为什么它会阻塞呢 举例如下: 锁定的对象位于0x00000000c2ad4be8 等待 "ajp-bio-10032-exec-15" daemon prio=10 tid=0

通过线程转储查看,我看到了几个被阻塞的线程,但有些线程“正在等待锁定”,有些线程“正在等待”,而只有一个可运行线程可能已经获得了锁定。我的问题是,为什么有些人“等待锁定”,而另一些人“等待”?另外,“等待”的线程似乎有锁,但不是实际持有锁的可运行线程,因为它说它在堆栈跟踪的较低地址锁定了对象,那么如果它有锁(或者没有锁),为什么它会阻塞呢

举例如下: 锁定的对象位于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-15”守护程序prio=10 tid=0x00007f888c02d000 nid=0x74c8.wait()[0x00007f8821792000]
java.lang.Thread.State:阻塞(在对象监视器上)
在java.lang.Object.wait(本机方法)
-等待(一个java.lang.Object)
等待(Object.java:503)
位于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)
对象中的“ajp-bio-10032-exec-95”守护程序prio=10 tid=0x00007f888c089800 nid=0x1e66.wait()[0x00007f881df4b000]
java.lang.Thread.State:阻塞(在对象监视器上)
在java.lang.Object.wait(本机方法)
-等待(一个java.lang.Object)
等待(Object.java:503)
位于com.tibco.tibjms.TibjmsxLinkTcp.disconnect(TibjmsxLinkTcp.java:1026)
-锁定(一个java.lang.Object)
在com.tibco.tibjms.TibjmsConnection._close(TibjmsConnection.java:2430)
最后是可运行线程

"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)
“ajp-bio-10032-exec-142”守护程序prio=10 tid=0x00007f888c0b7000 nid=0x3657可运行[0x00007f88167d4000]
java.lang.Thread.State:可运行
位于java.lang.Thread.start0(本机方法)
在java.lang.Thread.start(Thread.java:713)处
-锁定(com.tibco.tibjms.TibjmsxLinkTcp$LinkReader)
位于com.tibco.tibjms.TibjmsxLinkTcp.start(TibjmsxLinkTcp.java:968)
-锁定(一个java.lang.Object)