我遇到了线程超时问题,我想可能是线程调度问题,但不确定是不是这样。 业务场景如下。
我的同事负责编写该服务。他使用了java的多线程技术,线程池使用了Executors.newFixedThreadPool。该服务需要处理一些复杂的业务逻辑。复杂的业务逻辑需要我来支持。我写了一个打包成jar的算法模块,算法模块的压测时间平均在10ms左右。当然这是在单线程环境下的结果。当他把我的模块放入程序中运行时,使用压测程序测试服务时,线程统计算法超过几分钟。当然,这个时间就是线程的生命周期。当单机使用相同参数调用的程序时,时间依然是几毫秒。所以问题就出现了。为什么超时?
我的同事没有向我提供该计划的更多细节。他认为该计划很耗时。我对他的行为很生气,但问题总是需要解决的。我对线程调度算法不太了解,他也是。现在想统计线程的有效执行时间,但是在java.lang.Thread对象中没有看到相关方法,不知道是否还有其他方法可以统计。
我也想知道是否还有其他方法可以解释这个问题。
最佳答案
我相信您正在寻找的是一个分析器。探查器允许您在运行时检测代码,而无需修改源代码(或打包的 jar)来添加性能测量逻辑。探查器将告诉您每个线程的执行时间以及每个特定方法被调用/执行的时间。
有很多 Java 分析器,包括 gui 和 cmd。尝试使用 visualvm、jProfiler 或 Java Mission Control 等
关于java - 如何统计线程池中线程的有效执行时间,而不是线程的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58025795/