相同的输入不同的输出..时间计算

时间:2012-06-25 10:35:10

标签: java

我有一个棘手的问题需要解决。 我在方法调用之前使用System.currentTimeMillis(),之后立即使用System.currentTimeMillis() 我必须测量这两个陈述之间经过的时间。

waitingTime = System.currentTimeMillis(); //starts calculating time
bridge.getIn(direction); // tries to enter the bridge   
waitingTime = System.currentTimeMillis() - waitingTime ;// time elapsed

我担心的是每次运行程序时都会得到不同的结果。

我得到了这个(这是完美的):

Generated cars going north: 0 
Generated cars going south: 2

Waiting time for every single car:
==============================================================
A0/South:109ms
A1/South:0ms
==============================================================
Mean waiting time southbound cars : 54ms

然后几秒钟后我再次运行该程序,我得到了(这是错误的):

Generated cars going north: 0 
Generated cars going south: 2

Waiting time for every single car:
==============================================================
A0/South:0ms
A1/South:94ms
==============================================================
Mean waiting time southbound cars : 47ms

我说这个输出是错误的,因为每辆车的等待时间不应少于100毫秒。

基于currentTimeMillis函数实际影响时间计算的是什么?

为什么我会得到不同的结果?

有人可能会想:每次输入都是一样的吗?我会说是..输入参数

总是相同(两个示例),但程序使用Random类生成

给定线程数。

那是罪魁祸首吗?

该计划的一些细节:

从北到南的一群汽车(反之亦然)沿着双车道行驶。 过了一会儿,他们到了一座桥。这座桥只是单向的,而且容量有限。 一辆车需要100ms才能通过这座桥。不允许交通碰撞。

非常感谢。

1 个答案:

答案 0 :(得分:1)

输出/结果没有错。操作系统暂时中断当前正在执行的程序并运行高优先级程序,还涉及其他因素。因此,时间滞后。如果你想检查程序执行的准确时间,请尝试System.nanoTime()它以纳秒为单位返回时间并运行N次并采取平均次数(即使这样我也无法保证执行时间将会保持不变)

我的意思是尝试如下所示的一些事情。

 long totalTime=0;
    for(i=0;i<n;i++){ //where n is some value say 3,4,5
         waitingTime = System.nanoTime(); //starts calculating time
         bridge.getIn(direction); // tries to enter the bridge   
         waitingTime = System.nanoTime() - waitingTime ;// time elapsed
         totalTime+=waitingTime;
    }
    long totalTimeInMillis = totalTime/(n*1000);

注意:确保每次执行时环境应保持不变。