在Java中,要测量线程使用的CPU时间,通常会做类似这样的操作:
这个方法在之前运行得很好。但是自从引入了虚拟线程(JDK 21)之后,这个方法只适用于平台线程,而不适用于虚拟线程。
所以现在它总是报告为0:
那么,问题是在引入虚拟线程后,我们应该如何测量CPU时间呢?
var cpuTimeStart = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
//Some lengthy operation
var totalCPU = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime() - cpuTimeStart;
这个方法在之前运行得很好。但是自从引入了虚拟线程(JDK 21)之后,这个方法只适用于平台线程,而不适用于虚拟线程。
所以现在它总是报告为0:
var vThread = Thread.ofVirtual().start(() -> {
var cpuTimeStart = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
//Some lengthy operation
var totalCPU = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime() - cpuTimeStart;
//totalCPU is always 0
});
vThread.join();
那么,问题是在引入虚拟线程后,我们应该如何测量CPU时间呢?