3 回答

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

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
我不明白為什么 Timer 任務(wù)同時(shí)運(yùn)行。我已經(jīng)使用 Thread 編寫了相同的邏輯和調(diào)度,現(xiàn)在一切正常。

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
這很好用
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();
}
}
添加回答
舉報(bào)