我正在研究计算机硬件,我们了解到使用硬件计时器可获得比软件延迟更准确的结果.我已经在汇编中写了1毫秒的软件延迟,我可以开始一个使用这个延迟重复每个毫秒的过程,并且计数器每100毫秒做一次其他事情,这种技术不如使用我的硬件计时器那么精确内置了我现在要使用的硬件.
所以我想知道用Java构建的时序有多精确?我们有System.currentTimeMillis并且Thread.sleep这些可能不使用硬件定时器,那么这些内置Java方法与硬件定时器相比有多准确?
小智 7
我发现 Thread.sleep 不准确。事实上,我发现它的睡眠时间似乎比它承诺的要少。
配置为休眠 1 毫秒时的结果:
********* Average elapsed time = 957 micro seconds
Run Code Online (Sandbox Code Playgroud)
以下是我的测试:
public static void main(String[] args) throws InterruptedException {
List<Long> list = new ArrayList<Long>();
int i= 0;
while(i <=100){
long authStartTime = System.nanoTime();
Thread.sleep(1);
long elapsedTime = System.nanoTime() - authStartTime;
System.out.println("*****"+elapsedTime/1000+ " mics");
list.add(elapsedTime);
i++;
}
long sum=0;
for(long l : list){
sum = sum + l;
}
System.out.println("********* Average elapsed time = "+sum/list.size()/1000+" micro seconds");
System.exit(0);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7639 次 |
| 最近记录: |