Java线程监视\评测\测量

Java线程监视\评测\测量,java,multithreading,jvm,jvisualvm,Java,Multithreading,Jvm,Jvisualvm,我熟悉 我想测试\profile\测量线程获得了多少CPU时间。 我在my thread构造函数中添加了以下内容: ManagementFactory.getThreadMXBean().setThreadCpuTimeEnabled(true); if(!ManagementFactory.getThreadMXBean().isCurrentThreadCpuTimeSupported()) System.err.println("measure is not supported.

我熟悉

我想测试\profile\测量线程获得了多少CPU时间。 我在my thread构造函数中添加了以下内容:

ManagementFactory.getThreadMXBean().setThreadCpuTimeEnabled(true);
if(!ManagementFactory.getThreadMXBean().isCurrentThreadCpuTimeSupported())
    System.err.println("measure is not supported.");
ManagementFactory.getThreadMXBean().setThreadContentionMonitoringEnabled(true);
if(!ManagementFactory.getThreadMXBean().isCurrentThreadCpuTimeSupported())
    System.err.println("contention is not supported.");
然后,当线程完成执行时,我执行:

long tID = Thread.currentThread().getId();
long execTime = ManagementFactory.getThreadMXBean().getThreadCpuTime(tID);
但是对于我的大多数线程,我绝对肯定它们确实占用了CPU,我得到的执行时间是零(execTime==0)

我如何测量我的线?上述程序中可能存在什么问题


感谢高级版。

看一看,一切都完成了,无需重新发明轮子。

我从java VirtualVM(jvirtualvm)获取java进程ID,并在ThreadTop网站上执行其中一个示例,我得到的只是异常。你想帮我搜索吗?!或者给我一个解决方案??这两个项目做的事情和你做的一样——它们不是百万行长,所以看看源代码,看看它们是如何做到的。如果你不喜欢我的回答,不要理会,但请尊重那些试图帮助你的人。这太粗鲁了。如果你想把这个解决方案带到你的盘子里,就要为商业支持支付美元;说到“百万行长”,我上面截取的代码似乎没有“百万行”。与其让我参考你从未尝试过的其他实现,不如试着解释一下为什么上面的代码不好。不,我不在乎我的答案数量。你通过jconsole/visualvm确认了吗?我用的和你一样没有问题,也许是你什么时候调用的方法?如果通过jconsole mbean接口调用相同的函数,应该会看到一个非零的数字。。。您也可以尝试getThreadUserTime(id)@Toby,谢谢您的回复。对于大多数线程,我得到的是零值,而不是所有线程;所以我想,我在代码的正确位置调用了这些过程。使用JConsole强迫我不要结束程序并连接到它,但是JConsole提供了对系统中的线程(阻塞、等待、运行)的分析,而不是对终止的线程的分析。同样的想法也适用于JVisualVM。