我试图在5秒半(5.5)之后使while循环停止,所以我正在使用Calendar库获取分钟的当前秒数,然后在其上增加5.5。完成该过程后,循环运行,等待当前时间等于已保存的变量
我意识到秒数并没有增加……为什么?
代码:
package me.fangs.td;
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
double timeout = calendar.get(Calendar.SECOND) + 5.5;
while((double) calendar.get(Calendar.SECOND) < timeout) {
System.out.println((double) calendar.get(Calendar.SECOND));
Thread.sleep(1000);
}
}
}
答案 0 :(得分:2)
我宁愿/使用Timer
而不是自己动手,flask CLI是一种用于线程在后台线程中调度任务以备将来执行的工具。
Timer t = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("Five seconds");
}
};
t.schedule(task, TimeUnit.SECONDS.toMillis(5) + 500); // 5.5 seconds.
答案 1 :(得分:2)
我根本不会使用日历库,而是使用System.currentTimeMillis()
这是一个while循环,在5.5秒后终止:
long end = System.currentTimeMillis() + 5500;
while (System.currentTimeMillis() < end) {
//Do something
}
//Exit after 5.5 seconds
此版本的优点是,您可以在循环运行时更改结束时间,从而更改循环运行的时间。
答案 2 :(得分:1)
Answer by VoroX是正确的。但是使用java.time使其更加优雅和具有自说明性。
我们每次通过循环调用TestFlight
来捕获新的当前时间。日期时间对象不会自动更新。它们是那一刻的快照,被冻结了。在每种情况下都需要询问当前时间。
roduction push certificate
在实际工作中,我还添加了一个Instant.now
复选框,以防将工期修改为负数。