亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Timer 任務中的 Run 方法執行了兩次

Timer 任務中的 Run 方法執行了兩次

慕桂英546537 2023-05-24 16:18:17
我創建了一個每 20 秒運行一次的計時器。計時器任務需要超過一分鐘才能完成任務。定時器任務中的 run 方法在定時器任務完成前 20 秒后執行兩次。class A {    static Timer timer;     TimerTask timertask = new TimerTask({        public void run(){            if(check for some data in the database before inserting )            // Insert records into database         }    }    public test(){        A.timer.scheduleAtFixedRate(imertask,0, 20*1000);     }}將相同數據的兩條記錄插入數據庫,時間相差 14 秒。我希望數據庫中只有一條記錄 非常感謝對此的任何幫助。
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

按照意圖,如果第一次執行花費的時間超過 20 秒,則第二次執行將在之后立即開始。如果第一次執行超過 40 秒,第三次執行將在第二次執行后立即開始。依此類推,直到您在 N 秒后趕上大約 N/20 次執行。

在固定速率執行中,每次執行都是相對于初始執行的調度執行時間進行調度的。如果執行因任何原因(例如垃圾回收或其他后臺活動)而延遲,則將快速連續執行兩次或更多次以“趕上進度”。從長遠來看,執行頻率將恰好是指定周期的倒數(假設 Object.wait(long) 底層的系統時鐘是準確的)。

如果您兩次插入相同的數據,那么問題似乎在于您決定是否已經插入該數據,而不是執行之間的間隔。

如果任務運行了大約一分鐘,這是否表明存在錯誤,或者需要多長時間(例如連接到遠程數據庫)?


查看完整回答
反對 回復 2023-05-24
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

我不明白為什么 Timer 任務同時運行。我已經使用 Thread 編寫了相同的邏輯和調度,現在一切正常。



查看完整回答
反對 回復 2023-05-24
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

這很好用


class A {


    static Timer timer;


    TimerTask timerTask = new TimerTask() {

        @Override

        public void run() {

            System.out.println("Task is running");

        }

    };


    public void test() {

        timer = new Timer();

        timer.scheduleAtFixedRate(timerTask, 0, 5 * 1000);


    }


        public static void main(String[] args) {

        A a = new A();

        a.test();

    }


}



查看完整回答
反對 回復 2023-05-24
  • 3 回答
  • 0 關注
  • 280 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號