如何使用计时器来减慢 for 循环的速度
How to use a Timer to slow a for-loop down
在制作 for 循环时,我想控制 'refresh' 循环所需的时间,我想我可以用计时器来做到这一点。
我唯一的问题是计时器使 运行 像 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();
}
}
这是一个不错的简单解决方案,但线程处于休眠状态并且在大多数时间不做任何有用的事情。这在大多数情况下都很好,但更有效的解决方案是使用 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);
在您的 for-loop
中使用此代码
try {
Thread.sleep(5000);
} catch(InterruptedException ex) {
ex.printStackTrace();
}
在制作 for 循环时,我想控制 'refresh' 循环所需的时间,我想我可以用计时器来做到这一点。
我唯一的问题是计时器使 运行 像 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();
}
}
这是一个不错的简单解决方案,但线程处于休眠状态并且在大多数时间不做任何有用的事情。这在大多数情况下都很好,但更有效的解决方案是使用 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);
在您的 for-loop
try {
Thread.sleep(5000);
} catch(InterruptedException ex) {
ex.printStackTrace();
}