Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算线程池中线程的有效执行时间,而不是线程的生存期?_Java_Time_Threadpool - Fatal编程技术网

Java 如何计算线程池中线程的有效执行时间,而不是线程的生存期?

Java 如何计算线程池中线程的有效执行时间,而不是线程的生存期?,java,time,threadpool,Java,Time,Threadpool,我遇到了一个线程超时问题,我认为这可能是一个线程调度问题,但我不确定它是否是这样的。 业务场景如下所示 我的同事负责编写服务。他使用java的多线程技术,线程池使用Executors.newFixedThreadPool。该服务需要处理一些复杂的业务逻辑。复杂的业务逻辑需要我来支持。我编写了一个打包成罐子的算法模块,算法模块的压力测量时间平均约为10ms。当然,这是单线程环境中的结果。当他将我的模块放入程序并运行它时,当使用压力测试程序测试服务时,线程计算算法的时间超过几分钟。当然,这是线程的生

我遇到了一个线程超时问题,我认为这可能是一个线程调度问题,但我不确定它是否是这样的。 业务场景如下所示

我的同事负责编写服务。他使用java的多线程技术,线程池使用Executors.newFixedThreadPool。该服务需要处理一些复杂的业务逻辑。复杂的业务逻辑需要我来支持。我编写了一个打包成罐子的算法模块,算法模块的压力测量时间平均约为10ms。当然,这是单线程环境中的结果。当他将我的模块放入程序并运行它时,当使用压力测试程序测试服务时,线程计算算法的时间超过几分钟。当然,这是线程的生存期。当一台机器使用一个使用相同参数调用的程序时,时间仍然是几毫秒。于是问题出现了。为什么会超时

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


我还想知道是否有其他方法来解释这个问题。

我相信您正在寻找的是一个分析器。分析器允许您在运行时插入代码,而无需修改源代码或打包的jar来添加性能度量逻辑。探查器将告诉您每个线程的执行时间以及调用/执行每个特定方法的时间


有很多java分析器,包括gui和cmd。请尝试visualvm、jProfiler或Java任务控制来列举一些

在run方法的开始和结束处添加对System.nanoTime的调用。计算差值,得到实际执行时间的大致值。如果函数不是原子函数,则调用System.nanoTime将没有帮助。例如,函数可以在时间t0启动,执行100ms,然后线程切换1秒。然后,当它恢复时,第二个nanoTime调用将报告100ms+1秒,这不是我们真正需要的。该方法只能用于测量经过的时间,与任何其他系统或挂钟时间概念无关。API的意思是它不是有效的CPU执行时间。时间分析器告诉我它是有效时间还是生存时间