精准控制1秒内发送500条数据

while(true){
    val start = System.currentTimeMillis()
    var nowtime = start
    var i = 1
    while (nowtime <= start + 1000L && i<=500) {
      
        println(i)

        i=i+1
     nowtime=System.currentTimeMillis()
    }

    }

我的这个有问题,这个是个死循环,一直在发,而且我还有别的的代码,程序运行十几分钟就会报OOM

package Solution474;

public class test {
	public static void main(String[] args) {
		while (true) {

			var start = System.currentTimeMillis();

			var nowtime = start;

			var i = 1;

			while (nowtime <= start + 1000L && i <= 500) {

				System.out.println(i);

				i = i + 1;

				nowtime = System.currentTimeMillis();

			}
			try {
				Thread.sleep(start + 1000 - nowtime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}

}

上面代码是输出500歇息一些

上面的代码不会死循环啊,而且也能达到你的目的,一秒内print 500个数字出来。

一般在10~20ms之内就可以把500个数字print出来。

我认为可以直接发 500 次,然后剩下的时间就直接等待。

有些代码我没写,这个是个flink程序,需要模拟数据,还有别的代码,会一直循环发送,前面1秒钟可以循环500次,到后面循环完不成,过一段时间就会OOM

发完500继续发500

您好,我是问答小助手,你的问题已经很多小伙伴为您解答了问题,您看下是否解决了您的问题。

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~