Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环运行5分钟_Java - Fatal编程技术网

Java 循环运行5分钟

Java 循环运行5分钟,java,Java,我有一个要求运行一段时间循环5分钟。 我查找了计时器api,但找不到这样做的方法。 任何人都可以为此提供一个代码snipet。 谢谢最简单的方法就是检查每次迭代经过了多少时间。例如: final long NANOSEC_PER_SEC = 1000l*1000*1000; long startTime = System.nanoTime(); while ((System.nanoTime()-startTime)< 5*60*NANOSEC_PER_SEC){ // do st

我有一个要求运行一段时间循环5分钟。 我查找了计时器api,但找不到这样做的方法。 任何人都可以为此提供一个代码snipet。

谢谢

最简单的方法就是检查每次迭代经过了多少时间。例如:

final long NANOSEC_PER_SEC = 1000l*1000*1000;

long startTime = System.nanoTime();
while ((System.nanoTime()-startTime)< 5*60*NANOSEC_PER_SEC){
  // do stuff
}
最终长纳米秒每秒=1000l*1000*1000;
long startTime=System.nanoTime();
而((System.nanoTime()-startTime)<5*60*NANOSEC_/秒){
//做事
}
这将运行循环,直到超过5分钟

注:

  • 当前循环迭代将始终完成,因此在实践中,它将始终运行5分钟多一点
  • 对于此应用程序,
    System.nanoTime()
    System.currentTimeMillis()
    更合适,因为如果调整计算机的系统时钟,后者将发生变化,从而中断计算。感谢Shloim指出这一点

  • 因为你说的是计时器API,我想你想要的是一个延迟,而不是“循环运行5分钟”。如果是这样的话,你可以使用这样的东西,让CPU做更多有用的事情,而不是忙着等待。或者至少节省一些能源和地球。

    这个循环将运行5分钟。更改计算机的日期/时间(用户或NTP)将不会影响该操作

    long endTime=System.nanoTime()+TimeUnit.NANOSECONDS.convert(5L,TimeUnit.MINUTES);
    while(System.nanoTime()

    应该避免使用其他方法,如System.currentTimeMillis()
    ,因为它们依赖于计算机日期/时间。

    谢谢,我正在寻找。是的,对于简单的延迟,这是正确的答案。问题有点不清楚……如果用户在循环运行时调整时钟,那么循环在1分钟内不会运行。它可能运行数月或数年。这是因为
    System.currentTimeMillis()
    返回自1970/01/01-00:00以来的毫秒数。您需要一个单调的时间计数器,如
    System.nanoTicks()
    long endTime = System.nanoTime() + TimeUnit.NANOSECONDS.convert(5L, TimeUnit.MINUTES);
    while ( System.nanoTime() < endTime ){
      // do whatever
    }