3 回答

TA貢獻1875條經驗 獲得超5個贊
按照意圖,如果第一次執行花費的時間超過 20 秒,則第二次執行將在之后立即開始。如果第一次執行超過 40 秒,第三次執行將在第二次執行后立即開始。依此類推,直到您在 N 秒后趕上大約 N/20 次執行。
在固定速率執行中,每次執行都是相對于初始執行的調度執行時間進行調度的。如果執行因任何原因(例如垃圾回收或其他后臺活動)而延遲,則將快速連續執行兩次或更多次以“趕上進度”。從長遠來看,執行頻率將恰好是指定周期的倒數(假設 Object.wait(long) 底層的系統時鐘是準確的)。
如果您兩次插入相同的數據,那么問題似乎在于您決定是否已經插入該數據,而不是執行之間的間隔。
如果任務運行了大約一分鐘,這是否表明存在錯誤,或者需要多長時間(例如連接到遠程數據庫)?

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();
}
}
添加回答
舉報