Tomcat线程在等待和锁定同一资源。

5
考虑以下Java\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)既被锁定,又被等待 - 这是什么意思?

1个回答

4

这更像是一个无限等待()。它会显示类似于id1被id2拥有的监视器阻塞。


好的,我查看了JIoEndpoint.Worker的源代码。正如我所想,453行的await()方法是同步的,并且在484行的run()方法中有一个对它的开放调用。 - clinton
请您详细阐述您的答案并提供解决方案,这样我就可以接受它了吗? - Adam Matan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接