gpt4 book ai didi

等待任何其他线程未持有的锁的 Java 线程

转载 作者:行者123 更新时间:2023-11-30 10:56:01 25 4
gpt4 key购买 nike

我偶然发现了奇怪的情况,java 线程转储显示一个线程正在等待锁定一个对象,但该对象没有被任何其他线程锁定。这是线程转储中的一个片段:

"PacketPublisher" #18 daemon prio=10 os_prio=2 tid=0x0000000059adf800 nid=0x1ca0 waiting for monitor entry [0x000000005bbce000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.tangosol.coherence.component.net.socket.UdpSocket.send(UdpSocket.CDB:21)
- waiting to lock <0x00000000a00aea00> (a java.net.DatagramPacket)
at com.tangosol.coherence.component.net.PacketBundle.send(PacketBundle.CDB:1)
at com.tangosol.coherence.component.util.daemon.queueProcessor.packetProcessor.PacketPublisher.onPacket(PacketPublisher.CDB:87)
at com.tangosol.coherence.component.util.daemon.queueProcessor.packetProcessor.PacketPublisher.onNotify(PacketPublisher.CDB:44)
at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:51)
at java.lang.Thread.run(Thread.java:745)

并且在线程转储中,0x00000000a00aea00 对象上没有其他锁定事件。怎么可能?

背景:这是一个在 JDK 1.8u60 上运行的 Coherence 12.1.3 应用程序。这种情况不是暂时的,当我做更多的线程转储时,这个线程仍然被阻塞。我必须重新启动应用程序才能使其再次运行,有时它会在不阻塞的情况下运行,因此它不是确定性的。我也无法在 JDK 1.7u79 上重现它。如果您能解释线程永远等待未锁定的对象是如何发生的,那么我也许就能找出我的应用程序或 Coherence 中的问题所在。

最佳答案

有时,即使另一个应用程序线程不持有对象监视器,垃圾收集和类加载也会导致线程显示为阻塞状态。 (但是,我不知道为什么您会看到 1.8 JVM 而不是 1.7 JVM 的问题。)

这是一个类似的问题,其中的一些答案可能会提供一些线索:

Java thread dump: BLOCKED thread without "waiting to lock ..."

关于等待任何其他线程未持有的锁的 Java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33149358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com