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 如何设置每秒重复计数?_Java_Loops - Fatal编程技术网

Java 如何设置每秒重复计数?

Java 如何设置每秒重复计数?,java,loops,Java,Loops,我使用while循环在程序中重复代码。我想每秒重复1000次代码。如何执行此操作?对于某些代码的固定延迟执行,使用计时器对象可能是更好的方法,例如或,甚至取决于您试图完成的任务。也就是说,无法保证频率和1000/s(或1ms)的频率相当快,java.util.Timer和javax.swing.Timer将无法跟上 另见: 尝试使用线程并使用thread.sleep()或System.currentTimeMillis()/1000,这将为您提供以秒为单位的时间。我将向您展示一个使用Sy

我使用while循环在程序中重复代码。我想每秒重复1000次代码。如何执行此操作?

对于某些代码的固定延迟执行,使用计时器对象可能是更好的方法,例如或,甚至取决于您试图完成的任务。也就是说,无法保证频率和1000/s(或1ms)的频率相当快,
java.util.Timer
javax.swing.Timer
将无法跟上

另见:


尝试使用线程并使用thread.sleep()或System.currentTimeMillis()/1000,这将为您提供以秒为单位的时间。

我将向您展示一个使用
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.