【问题标题】:How to use a Timer to slow a for-loop down如何使用计时器来减慢 for 循环
【发布时间】:2017-10-13 16:30:50
【问题描述】:

在制作 for 循环时,我想控制“刷新”循环所需的时间,我想我可以用计时器来做到这一点。
我唯一的问题是 Timer 一直像 for 循环一样运行 - 重复和重复和重复 - 所以它只是阻止 for 循环重复,这不是我想要的。
我的 for 循环代码在这里:

for(int i=0; i < 200; i += 4){
    System.out.println("Hopefully will only run once...per 5 secs");
    new java.util.Timer().schedule( 
        new java.util.TimerTask() {
            @Override
            public void run() {

            }
        }, 
        5000 // 5 sec buffer, but never stops buffering
    );
}

【问题讨论】:

    标签: java for-loop timer buffer


    【解决方案1】:

    我认为您正在寻找这样的东西:

    for(int i=0; i < 200; i += 4){
        System.out.println("Hopefully will only run once...per 5 secs");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    

    这是一个不错的简单解决方案,但线程处于休眠状态并且在大多数情况下没有做任何有用的事情。在大多数情况下这很好,但更有效的解决方案是使用 ScheduledExecutorService,这就像您尝试过的 Timer,只是更现代。

    这是一个大概的工作原理:

    ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
    
    AtomicInteger i = new AtomicInteger(0);
    exec.scheduleAtFixedRate(() -> {
        int j = i.getAndAdd(4);
        if (j >= 200) {
            exec.shutdownNow();
            return;
        }
    
        System.out.println(j); //Will print 0,4,8 etc.. Once every 5 seconds
        //Do stuff
    }, 0, 5, TimeUnit.SECONDS);
    

    【讨论】:

    • scheduleAtFixedRate 确实是要走的路!
    【解决方案2】:

    在您的 for-loop 中使用此代码

    try {
        Thread.sleep(5000);
    } catch(InterruptedException ex) {
        ex.printStackTrace();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2012-03-03
      • 2022-12-03
      • 2021-11-03
      相关资源
      最近更新 更多