2012-10-21 54 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

請您詳細說明您的答案並添加一個解決方案,以便我可以接受它? –