Java 线程阻塞在哪个监视器上?

Java 线程阻塞在哪个监视器上?,java,multithreading,concurrency,Java,Multithreading,Concurrency,想知道是否有一种编程方式可以获取线程(如果处于阻塞状态)等待锁定的对象?接口是在java 5中引入的,在这种情况下很方便。这对jvm线程系统的管理非常有帮助。在死锁的情况下特别有用 您可以使用ThreadMxBean::getThreadInfo查找线程,它将线程id作为输入 ThreadInfo有一个方法getLockName(),它返回一个字符串,表示阻止线程的监视器对象 希望这能回答您的问题。这和单元测试Java平台的锁定实现一样好,这对我来说毫无意义。这就是为什么我在上下文部分特别提到跳

想知道是否有一种编程方式可以获取线程(如果处于阻塞状态)等待锁定的对象?

接口是在java 5中引入的,在这种情况下很方便。这对jvm线程系统的管理非常有帮助。在死锁的情况下特别有用

  • 您可以使用ThreadMxBean::getThreadInfo查找线程,它将线程id作为输入
  • ThreadInfo有一个方法getLockName(),它返回一个字符串,表示阻止线程的监视器对象

  • 希望这能回答您的问题。

    这和单元测试Java平台的锁定实现一样好,这对我来说毫无意义。这就是为什么我在上下文部分特别提到跳过此类测试的必要性,我仍然会选择跳过这一必要性,以避免脱离这个问题。这个问题仍然有效-如何以编程方式获取线程被阻止的对象以获得锁定?没有“常规”方法可以做到这一点
    Thread.holdsLock(Object)
    最接近,但它用于检查当前线程是否拥有监视器。我确信有一种方法可以实现您想要的,但接下来我们回到问题:“为什么要做一些非常复杂的事情来测试Java的锁定实现?”。谢谢@Kayaman。为了避免离题,我实际上会删除上下文,让问题变得简单。出于学习的目的,请对此进行更多的讨论。根据JVM供应商的不同,javacore文件包含有用的信息。谢谢@teeman12,这正是我想要的信息。非常感谢。