簡體   English   中英

帶有延遲的Java計時器永遠不會運行

[英]Java timer with delay never runs

我要安排java.util.Timer類和TimerTask,我想每天凌晨2點執行任務。

我的代碼:

public class AutomaticPuller {

    final private Timer t = new Timer();

    public AutomaticPuller() {
        Calendar today = Calendar.getInstance();
        today.set(Calendar.HOUR_OF_DAY, 2);
        today.set(Calendar.MINUTE, 0);
        today.set(Calendar.SECOND, 0);
        long cooldown = today.getTimeInMillis();
        if (today.getTime().before(new Date(System.currentTimeMillis()))) {
            cooldown += 24L*60L*60L*1000L;  
        }
        System.out.println("Task will run at: " + new Date(cooldown));
        TimerTask tt = new TimerTask() {
            public void run() {
                try {
                    updateAll();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        t.schedule(tt, cooldown, 24L*60L*60L*1000L);
    }
}

我看到了println的輸出(任務將在以下位置運行),但是應在2AM運行的任務卻從未執行過,為什么? 我不明白,我從未遇到過這樣的問題。 輸出日志中沒有錯誤。

因為您使用今天的時間(以毫秒為單位)作為執行任務之前的延遲(以毫秒為單位)。 這意味着任務將在大約47年內執行。

通過添加此行來修復:

cooldown = cooldown - System.currentTimeMillis();

基本上,我只是忘了從冷卻中刪除當前的毫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM