java - 如何使用计时器减慢 for 循环速度

标签 java for-loop timer buffer

在制作 for 循环时,我想控制“刷新”循环所需的时间,并且我想我可以使用计时器来做到这一点。
我唯一的问题是计时器像 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
    );
}

最佳答案

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

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();
    }
}

这是一个很好、简单的解决方案,但线程处于 hibernate 状态,并且在大多数情况下不执行任何有用的操作。对于大多数情况来说这很好,但更有效的解决方案是使用 ScheduledExecutorService ,这就像您尝试过的计时器,只是更现代。

以下是其工作原理的粗略草图:

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);

关于java - 如何使用计时器减慢 for 循环速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46734304/

相关文章:

java - org.slf4j.Logger 错误

使用迭代器的 java.util.ConcurrentModificationException

java - Robotium - 如何截取屏幕截图并从测试用例内部打开

javascript - 在 `.remove()` 循环内调用 `for` 不会删除所有元素

iphone - 延迟但不禁用 iPhone 自动锁定

java - 在集合中添加元素

Java循环效率

C 意外标识符 - For 循环增量

带对象的 Javascript 计时器

c# - System.Threading.Timer 调用每天漂移几秒钟