我尝试每周运行一次方法。例如,每周一晚上 8 点。我使用这段代码:
Timer timer = new Timer();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);
Date time = calendar.getTime();
timer.schedule(new PrintTask(),
time);
// other code where variable gets increased
public class PrintTask extends TimerTask {
public void run() {
variable = 0;
}
}
但是,如果我是对的,只要日历时间已经过去,dosomething
代码就会连续运行。例如,现在已经是星期一了,所以 dosomething
代码一直在运行。变量会增加,但必须在周一重置为 0。该变量现在始终为 0,因为它被一次又一次重置。如果我使用calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
,该变量不会重置,因为它还没有到星期日。但一旦到了周日晚上 8 点,他可能就会继续重置当天剩下的时间。
我希望 dosomething
代码仅在指定的时间执行一次。有人可以告诉我如何调整代码来实现这一目标吗?
对不起我的英语
最佳答案
请在这里查看这个问题(How i can run my TimerTask everyday 2 PM)。它几乎处理同样类型的问题。
使用Timer类的cancel API取消定时器,并在run()方法中重新调度定时器;这应该可以防止每次都更新变量。
关于Java:如何在指定时间仅运行此代码一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59875061/