我正在使用java中的代码,我必须发送到外部计算机才能运行。到目前为止,在我的计算机中,我正在使用此功能来了解时间(实时到现在已足够)
long start;
long end;
start = System.currentTimeMillis();
//
%code
//
end = System.currentTimeMillis();
time=(float) ((end - start)/1000.);
但后来我意识到,计算机分配了用户之间消耗的cpu时间,因此执行时间被“暂停”几秒钟,直到再次运行,因此我得到的时间不准确。并根据Recording Program's CPU Time的答案实现了这个例子:
try {
ThreadMXBean thread = ManagementFactory.getThreadMXBean();
long cpu = thread.getCurrentThreadCpuTime();
long user= thread.getCurrentThreadUserTime() ;
Thread.sleep(300);
int i=0;
while(i<100000){
System.out.println("hola");
i++;
}
cpu =( thread.getCurrentThreadCpuTime() - cpu ) ;
user=( thread.getCurrentThreadUserTime() -user );
System.out.println("Cpu:"+cpu);
System.out.println("User:"+user);
}
catch (InterruptedException _) {}
例如我得到了这些结果:
Cpu:1218750000&gt;用户:593750000
Cpu:1453125000&gt;用户:750000000
是thread.getCurrentThreadUserTime()我需要的功能吗?
答案 0 :(得分:0)
我从未使用过这个ThreadMXBean,虽然它有时在过去很有用:)
无论如何,JavaDoc告诉
long getCurrentThreadUserTime()
以纳秒为单位返回当前线程在用户模式下执行的CPU时间。返回值的精度为纳秒,但不一定是纳秒精度。 这是一种方便的本地管理方法,相当于调用:
getThreadUserTime(Thread.currentThread()的getId());
返回: 如果启用了CPU时间测量,则当前线程的用户级CPU时间;否则为-1。 抛出: UnsupportedOperationException - 如果Java虚拟机不支持当前线程的CPU时间测量。 也可以看看: getCurrentThreadCpuTime(),isCurrentThreadCpuTimeSupported(),isThreadCpuTimeEnabled(),setThreadCpuTimeEnabled(boolean)
所以你所做的似乎是正确的。您可能会问自己为什么数字如此之高,它们以纳秒返回。