gpt4 book ai didi

java - 我如何检测我的方法在等待什么?

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:28 26 4
gpt4 key购买 nike

我在 Java 中有一个方法可以调用其他几个方法。在固定线程池中从多个线程调用此方法。工作人员的数量与可用处理器(核心)的数量相同。

public void query() {
method1();
method2();
}

当我使用 VisualVM 分析程序执行时,method1()method2() 时间非常短,但是 query() 自拍时间很长。但是该方法除了两次调用之外没有其他代码。 method1()method2() 中可能存在同步,但在我可以控制的代码中没有明显的同步。

当我将池中的 worker 数减少到 1 时,这个 self 时间几乎没有了。整个程序的单线程和多线程执行时间几乎是一样的。我认为这意味着我的方法 query() 正在等待某事。

没有死锁,执行完成。 method1()method2() 这两个方法调用了很多其他东西,包括混淆后的 jar 中的库类,所以我调试起来并不容易。然而,query() 方法是使用 java.util.concurrent.ExecutorService 直接从工作线程调用的。

最佳答案

对正在运行的进程发出级别 3 的 kill 命令。所有线程都将堆栈跟踪转储到标准输出,应用程序将继续运行。

kill -3 <pid>

请注意,您不会在发出 kill 命令的控制台上看到任何内容。 Java 应用程序本身将具有输出。您可能需要检查日志,具体取决于应用重定向其输出的位置。

关于java - 我如何检测我的方法在等待什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29747345/

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