gpt4 book ai didi

等待锁定未(明显)锁定的对象的 Java 线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:30:43 26 4
gpt4 key购买 nike

通常当我请求线程转储时,系统性能不佳的症状很容易解释;也就是说,通常我会看到许多线程显然正在等待一个已被获取但未被另一个释放的监视器。

在这种情况下,我有很多线程在等待监视器 (0x965ad100),但似乎没有一个线程首先拥有该监视器。有问题的线程可以用这个签名来识别:

waiting to lock <0x965ad100> (a uk.gov.dti.og.fox.ConAgent)

我试过用谷歌搜索这个,我似乎找到的都是讨论锁定监视器的帖子,没有关于等待未锁定监视器的帖子。

完整的线程转储:http://www.basson.at/docs/stackoverflow/thread_dump.txt

我希望这里有人可以解释我所看到的,或者至少为我指明正确的方向。预先感谢您的任何回复。

最佳答案

有可能(尽管不太可能)线程在获取线程转储时刚刚释放了监视器。在释放监视器和下一个线程获取它之间可能有一段短暂的时间。如果您没有真正陷入僵局,这可以解释您所看到的情况。尝试另一个线程转储并检查那个线程转储。

更有可能的是,某处已经有一个线程已经持有监视器。有时并不明显。您的堆栈跟踪有一些“锁定”行,其中列出了持有某些锁的线程,但该列表不一定完整。例如,我怀疑未列出通过 JNI 获得的锁。

如果你可以更换内置锁,例如java.util.concurrent.locks.ReentrantLock,然后你可以暂停程序并附加调试器,找到你关心的锁,并使用 getOwner 找到锁的所有者方法。

关于等待锁定未(明显)锁定的对象的 Java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174560/

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