Я пытаюсь использовать ThreadMXBean.getThreadCpuTime
, чтобы получить процессорное время основного потока. Тем не менее, я получаю то же время, хотя поток, должно быть, проделал некоторую работу, на которую нужно время. Теперь я сомневаюсь в точности использования ThreadMXBean.getThreadCpuTime
для получения времени ЦП. Мой пример кода ниже:
package edu.seu.juc.problem;
import java.lang.management.ManagementFactory;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class TestGetThreadCpuTime {
private static Lock lock = new ReentrantLock();
/***
*
* @param args
*/
public static void main(String[] args) {
System.out.println("CPU time: " + ManagementFactory.getThreadMXBean().getThreadCpuTime(Thread.currentThread().getId())
/ (1000 * 1000));
for (int i = 0; i < 8; i++) {
lock.lock();
Long startTime = System.currentTimeMillis();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
Integer sum = 1;
for (int j = 0; j < 1000000; j++) {
sum += j;
}
System.out.println(sum);
System.out.println("total: " + (System.currentTimeMillis() - startTime));
System.out.println("CPU time: " + ManagementFactory.getThreadMXBean().getThreadCpuTime(Thread.currentThread().getId())
/ (1000 * 1000));
System.out.println("blocked time: " + ManagementFactory.getThreadMXBean().getThreadInfo(Thread.currentThread().getId()).getBlockedTime());
System.out.println("waited time: " + ManagementFactory.getThreadMXBean().getThreadInfo(Thread.currentThread().getId()).getWaitedTime());
lock.unlock();
}
}
}
Результат ниже
CPU time: 140
1783293665
total: 220
CPU time: 140
blocked time: -1
waited time: -1
1783293665
total: 217
CPU time: 156
blocked time: -1
waited time: -1
1783293665
total: 210
CPU time: 171
blocked time: -1
waited time: -1
1783293665
total: 215
CPU time: 187
blocked time: -1
waited time: -1
1783293665
total: 204
CPU time: 187
blocked time: -1
waited time: -1
1783293665
total: 203
CPU time: 187
blocked time: -1
waited time: -1
1783293665
total: 203
CPU time: 187
blocked time: -1
waited time: -1
Почему процессорное время сохраняет 187ms
? Вроде неразумно.