gpt4 book ai didi

java - 如何检查哪个线程在握住监视器?

转载 作者:行者123 更新时间:2023-12-03 13:18:34 24 4
gpt4 key购买 nike

我有一个性能问题(在使用并行集合和 future 的复杂Scala代码中)。我已经使用JFR来检查更多详细信息,并且我可以看到问题本身表现为线​​程正在等待监视对象(通过调用java.util.concurrent.ForkJoinTask#internalWaitwait方法,该线程似乎正在ForkJoinTask中等待)。我想知道哪个线程持有此监视器对象(以及从哪个函数/调用堆栈输入了监视器)。 JFR向我显示了监视器的某种地址,但是我没有找到一种通过该地址进行搜索/过滤的方法。
enter image description here
JMC,插件或其他方法中是否存在某些 View ,该如何检查谁以及何时锁定和释放给定监视器?

最佳答案

问题是,正在等待的监视对象在技术上没有任何线程持有。这样的监视器没有“所有者”。通常,您无法事先知道哪个线程负责调用notify,因为它可以是任何线程,也可以根本没有线程。
但是,如果已经通知了监视器,则将发生一个JFR事件,其中包含有关通告程序线程的信息。您可以在屏幕截图中看到它:显示器已通过scala-execution-context-global-54线程通知。

关于java - 如何检查哪个线程在握住监视器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63227410/

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