我正在尝试每三秒运行一次 java.util.Timer
,并且我需要在特定条件下将它再延迟 2 秒。为了检查这是否可以使用 Thread.sleep()
实现,我编写了以下代码。
Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
if (true) { //When this is false timer should continue at 3 second interval.
try {
Thread.currentThread().sleep(2000); //Delay by another 2 seconds.
} catch (Exception ex) {
ex.printStackTrace();
}
}
System.out.println(new Date());
}
}, 0, 3000); //Trigger every 3 seconds.
我希望打印出相差 5 秒的时间戳。但我得到它的时间相差 3 秒。
Tue Sep 18 15:08:17 IST 2018
Tue Sep 18 15:08:20 IST 2018
Tue Sep 18 15:08:23 IST 2018
Tue Sep 18 15:08:26 IST 2018
Tue Sep 18 15:08:29 IST 2018
我错过了什么?
最佳答案
您的 2 秒 sleep 只是在 TimerTask
触发器之间的 3 秒间隔内模拟 2 秒的工作。因此,在您休眠后大约 1 秒,您的计时器将再次启动。
尝试改为 sleep 5 秒。
但是,请记住,以这种方式延迟并不是很稳定。计时器将考虑所有落后于计划的任务,并在前一个任务完成后立即按顺序触发它们。如果您真的想这样做,最好取消任务并将它们重新安排为 5 秒间隔。
关于java - 再延迟 java.util.Timer x 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52383965/