如何使用Timer来减慢for循环

时间:2017-10-13 16:30:50

标签: java for-loop timer buffer

在制作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
    );
}

2 个答案:

答案 0 :(得分:3)

for-loop

中使用此代码
try {
    Thread.sleep(5000);
} catch(InterruptedException ex) {
    ex.printStackTrace();
}

答案 1 :(得分:2)

我认为您正在寻找类似的东西:

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,就像你试过的计时器一样,只是更现代。

这是一个如何运作的草图:

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