我要求在5分钟内运行一个while循环。
我找了计时器api,但我找不到这样做。
任何人都可以为此提供代码段。
感谢
答案 0 :(得分:11)
最简单的方法是检查每次迭代的时间。例如:
final long NANOSEC_PER_SEC = 1000l*1000*1000;
long startTime = System.nanoTime();
while ((System.nanoTime()-startTime)< 5*60*NANOSEC_PER_SEC){
// do stuff
}
这将运行循环,直到超过5分钟。
注意:
System.nanoTime()
比System.currentTimeMillis()
更合适,因为如果计算机的系统时钟被调整,后者将会改变,从而放弃计算。 感谢Shloim指出这一点。 答案 1 :(得分:3)
此循环将运行5分钟。它不会受到计算机日期/时间(用户或NTP)所做的更改的影响。
long endTime = System.nanoTicks() + TimeUnit.NANOSECONDS.convert(5L, TimeUnit.MINUTES);
while ( System.nanoTicks() < endTime ){
// do whatever
}
应避免使用System.currentTimeMillis()
等其他方法,因为它们依赖于计算机的日期/时间。
答案 2 :(得分:1)
因为你在谈论计时器API,我猜你所追求的是延迟而不是“循环运行5分钟”。如果是这种情况,你可以使用类似Thread.sleep(..)的东西,这样可以让CPU做更多有用的东西,等待繁忙。或至少节省一些能量和地球。