Java:如何在指定时间仅运行此代码一次?

标签 java timer calendar scheduler

我尝试每周运行一次方法。例如,每周一晚上 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/

相关文章:

javascript - 有没有办法可以使用 javascript 或 jquery 检索 ics 文件?

java - 是否可以降低加密级别以避免错误: Unable to initialize due to invalid secret key

android - 如何取消定时器并更新同一个定时器?

javascript - 如何根据描述对全日历事件进行颜色编码

JavaScript 函数从日历中获取下一个日期

java - 计时器滴答一秒后,如何更改 java 中的标签文本?

java - OOP - 向类添加属性的最佳方法

java - Anylogic 模拟存储在容器中的 Material

java - 改变 JTable TableHeaders 背后的背景

C# 定期触发函数的正确方法