在Java中以编程方式重新创建“kill 3”(尤其是锁定的监视器) 2 周,2 日 Questions & Answers 90 我需要捕获当前线程锁定的监视器列表,并将其转储到一个文件中。执行类似操作的唯一功能是Java VM的kill -3命令。有没有一种方法可以通过编程来做同样的事情
# 1 楼答案 可以从java.lang.managementbean获得关于运行中的JVM及其内容的各种有用信息。 调用ThreadMXBean.getThreadInfo 在同一JVM中从ManagementFactory然后.getLockedMonitors()获得的bean上,按照您的意愿进行格式化和写入。 从JVM外部,您可以使用JMX-RMI(在同一台机器上使用相同的用户ID,或者在远程机器上使用不同的身份验证选项)访问这些bean,但是当前线程可能会在一次访问和下一次访问之间发生变化; 您最好使用.dumpAllThreads()获取所有线程,然后在数组中找到所需的线程
# 1 楼答案
可以从
java.lang.management
bean获得关于运行中的JVM及其内容的各种有用信息。 调用ThreadMXBean.getThreadInfo 在同一JVM中从ManagementFactory
然后.getLockedMonitors()
获得的bean上,按照您的意愿进行格式化和写入。 从JVM外部,您可以使用JMX-RMI(在同一台机器上使用相同的用户ID,或者在远程机器上使用不同的身份验证选项)访问这些bean,但是当前线程可能会在一次访问和下一次访问之间发生变化; 您最好使用.dumpAllThreads()
获取所有线程,然后在数组中找到所需的线程