就像主题所说,它是否包括在BLOCKED和WAITING等中花费的时间,状态,还是这只是RUNNABLE?文档只是说“cpu time”,这有点模糊......
答案 0 :(得分:3)
ThreadMXBean.getThreadCpuTime()仅包括在RUNNABLE状态下花费的时间,但请注意,计算方式取决于平台。
这是一个程序,它显示getThreadCpuTime()仅涵盖线程实际执行某些操作的时间:
import java.lang.management.*;
public class Test implements Runnable {
public static void main(String[] args)
throws Exception {
long time = System.nanoTime();
Test test = new Test();
synchronized (test) {
new Thread(test).start();
while (test.cpu == -1) {
test.wait();
}
}
System.out.println("time: " + (System.nanoTime() - time));
System.out.println("cpu: " + test.cpu);
}
private long cpu = -1;
public synchronized void run() {
try {
ThreadMXBean thread = ManagementFactory.getThreadMXBean();
long cpu = thread.getCurrentThreadCpuTime();
Thread.sleep(300);
long time = System.nanoTime();
while (System.nanoTime() - time < 700000000);
this.cpu = thread.getCurrentThreadCpuTime() - cpu;
}
catch (InterruptedException _) {}
finally {
notify();
}
}
}
答案 1 :(得分:1)
是的,这只是RUNNABLE
,您可以通过以下方法通过ThreadInfo接收其他州的时间进一步统计数据:
TIMED_WAITING
中的WAITING
和getWaitedTime()
之间没有进一步的歧视。
答案 2 :(得分:0)
仅限Runnable。就是这样,否则就没用了。