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

Java 相同输入不同输出..时间计算,java,Java,我有一个棘手的问题要解决。 我在方法调用之前使用System.currentTimeMillis(),之后立即使用 我必须衡量这两种说法之间经过的时间 waitingTime = System.currentTimeMillis(); //starts calculating time bridge.getIn(direction); // tries to enter the bridge waitingTime = System.currentTimeMillis() - waitin

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

waitingTime = System.currentTimeMillis(); //starts calculating time
bridge.getIn(direction); // tries to enter the bridge   
waitingTime = System.currentTimeMillis() - waitingTime ;// time elapsed
我担心的是,每次运行程序时,我都会得到不同的结果

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

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

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

基于currentTimeMillis函数的时间计算实际上受到什么影响

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

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

始终相同(两个示例),但程序使用随机类生成

给定的线程数

那是罪魁祸首吗

关于该计划的一些细节:

一大群汽车从北向南(viceversa)沿着一条双车道道路行驶。 过了一会儿,他们到达一座桥。这座桥是单向的,承载能力有限。 一辆汽车通过这座桥需要100毫秒。不允许发生交通碰撞


非常感谢。

输出/结果中没有任何错误。操作系统暂时中断当前正在执行的程序,并运行高优先级程序,此外还涉及其他因素。因此,时间上存在滞后。如果您想检查程序执行所需的准确时间,请尝试
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);
long totalTime=0;

对于(i=0;i请显示a,因为您提供的信息不足以确定问题的原因。如果等待时间永远不应小于100,而应为==0,则我将在您的代码中查找错误,而不是System.currentTimeMillis()中的错误。如果桥上没有车,为什么等待时间会延长(而不是等待+过桥时间)与0不同?提供更多代码如何打印结果,以及如果只有一辆车,且桥梁通行能力为1,等待时间为零。一辆车不应该等待。如果你乘坐:3辆车,桥梁通行能力为1,那么你很快就会意识到等待时间永远不会低于100ms(100ms为总穿越时间)谢谢,我们不能很快意识到任何事情,因为我们没有密码。但是如果我是第一个来到桥上的人,我不明白我为什么要等。在我之后来到桥上的另外两个人必须等,但不是我。第二个人必须等不到100毫秒,因为当他来到桥上时,我已经过了桥的一半idge。JIT完全优化代码的3-5次是否足够?我只是要求他只计算平均执行时间。我认为他在做他所写方法的性能基准测试。所以你实际上说操作系统的行为会影响时间计算?还有什么会破坏最终结果?thanks@qxc, 这不是您调用
javac
的次数,JIT在运行时可以优化代码。因此,您可能希望在找到巴顿建议的平均值之前调用该方法几次。这样做只是为了获得更准确的性能基准。@luketorjussen U是对的。感谢您在我不知道的情况下分享的知识当然可以。非常感谢
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
 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);