如何统计线程池中线程的有效执行时间,而不是线程的生命周期?

How to count the effective execution time of a thread in a thread pool, not the lifetime of the thread?

遇到了线程超时的问题,我觉得可能是线程调度的问题,但不确定是不是这样的。 业务场景如下

我的同事负责写服务。他用的是java的多线程技术,线程池用的是Executors.newFixedThreadPool。该服务需要处理一些复杂的业务逻辑。复杂的业务逻辑需要我来支撑。我写了一个算法模块打包成jar,算法模块的压测时间平均在10ms左右。当然这是单线程环境下的结果。当他把我的模块放到程序里运行的时候,用压测程序测试服务的时候,线程统计算法的时间超过了几分钟。当然,这个时间就是线程的生命周期。单机使用同样参数调用的程序时,时间还是几毫秒。那么问题就来了。为什么会超时?

我的同事没有向我提供该计划的更多细节。他认为该计划很耗时。我对他的行为很生气,但问题总是需要解决的。线程调度算法我不是很懂,他也是。现在想统计线程的有效执行时间,但是在java.lang.Thread对象中没有看到相关的方法,不知道有没有其他方法可以统计。

我也想知道这个问题有没有其他的解释方法

我相信您正在寻找的是 探查器。探查器允许您在运行时检测代码,而无需修改源代码(或打包的 jar)来添加性能测量逻辑。探查器会告诉您每个线程的执行时间以及每个特定方法的执行时间 called/executed.

那里有许多 java 分析器,包括 gui 和 cmd。尝试 visualvmjProfilerJava Mission Control 等等