2012-10-21 51 views
3

考虑下面的Java \ Tomcat的线程转储:Tomcat的线程等待和锁定同一资源

"http-0.0.0.0-4080-4" daemon prio=10 tid=0x0000000019a2b000 nid=0x360e in Object.wait() [0x0000000040b71000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    - waiting on <0x00002ab5565fe358> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at java.lang.Object.wait(Object.java:485) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458) 
    - locked <0x00002ab5565fe358> (a org.apache.tomcat.util.net.JIoEndpoint$Worker) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484) 
    at java.lang.Thread.run(Thread.java:662) 

这是一个僵局?似乎相同的资源(0x00002ab5565fe358)是lockedwaited on - 这是什么意思?

+0

可能是花花公子。 –

回答

3

它更像是一个无限的等待()。它会说有点像id1在监视器上拥有id2

+0

这些ID是相同的。 –

+0

好的,我查看了JIoEndpoint.Worker的源代码。这是因为我认为线453上的await()方法是同步的,并且在线484处的run()方法中存在公开调用。 – clinton

+0

请您详细说明您的答案并添加一个解决方案,以便我可以接受它? –