我有一个棘手的问题要解决。我在方法调用之前和之后立即使用 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 类来生成一个
给定的线程数。
那是罪魁祸首吗?
关于程序的一些细节:
一堆从北向南行驶的汽车(反之亦然)沿着一条两条车道行驶。过了一会儿,他们到了一座桥。这座桥只有一种方式,容量有限。一辆汽车需要 100 毫秒才能通过这座桥。不允许发生交通碰撞。
非常感谢。