Java 如何设置每秒重复计数?
我使用while循环在程序中重复代码。我想每秒重复1000次代码。如何执行此操作?对于某些代码的固定延迟执行,使用计时器对象可能是更好的方法,例如或,甚至取决于您试图完成的任务。也就是说,无法保证频率和1000/s(或1ms)的频率相当快,Java 如何设置每秒重复计数?,java,loops,Java,Loops,我使用while循环在程序中重复代码。我想每秒重复1000次代码。如何执行此操作?对于某些代码的固定延迟执行,使用计时器对象可能是更好的方法,例如或,甚至取决于您试图完成的任务。也就是说,无法保证频率和1000/s(或1ms)的频率相当快,java.util.Timer和javax.swing.Timer将无法跟上 另见: 尝试使用线程并使用thread.sleep()或System.currentTimeMillis()/1000,这将为您提供以秒为单位的时间。我将向您展示一个使用Sy
java.util.Timer
和javax.swing.Timer
将无法跟上
另见:
System.nanoTime()
确定经过了多少时间的示例,并将解释为什么你的前提通常没有多大意义,你可能不应该这样做
首先,这里的代码将执行一个代码块1000次,并且每次都需要1秒的时间来完成,只要代码可以如此快速地执行
long startTime = System.nanoTime();
long currentTime = startTime;
int counter = 0;
while (((currentTime - startTime) < 1_000_000_000) || counter < 1000) { //Executes until 1 second has passed AND it has iterated 1000 times
counter++;
currentTime = System.nanoTime();
if (counter < 1000) {
//The code you want to execute 1000 times
System.out.println(counter);
}
}
System.out.println((currentTime - startTime)/1_000_000 + " milliseconds have passed.");
这将打印空行,以确保需要很长时间。对于我的系统,此输出:
2831 milliseconds have passed.
代码花费了2.8秒,因为时间不再是限制条件,但1000次迭代才是限制条件,并且没有办法让这个精确的代码每秒运行1000次,这是不可能的
TLDR:您可以强制某些内容花费最少的时间,但不能强制它花费最多的时间。没有直接的方法可以保证循环每秒执行1000次。但是,您可以在每次迭代中调用睡眠一段固定的时间。为什么循环必须每秒执行1000次?这似乎是一个问题。您的代码执行时间是否少于1ms?您是否关心代码在1秒内的执行是否均匀?为什么要投否决票?这似乎是一个相当正确的方法。是否有任何保证它每秒执行1000次?您的方法不使用循环。我高度怀疑这对于OP来说已经足够了,但是在发布推测性答案之前,最好在评论中要求澄清。@Blobonat您永远不能保证某些东西每秒被调用
n
次(或任何其他单位)。但是,使用标准计时器会给你最接近目标的机会。@Fureeish这就是为什么我对答案投了反对票,因为它没有提到。如果你知道1000次执行将在1秒内完成,并等待剩余的时间。我试试这个。
2831 milliseconds have passed.