首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Timer 類四種排程方法詳解:單次、固定延遲、固定頻率、指定時間

     編輯:Java 相關知識

概覽

java.util.Timer 提供四種核心排程方法,適用於簡單的定時任務需求。本文以表格與代碼對比四種模式的適用場景。

方法速查表

方法簽名觸發時間重複模式典型用途
schedule(TimerTask, Date)指定 Date 時間單次預約單次任務
schedule(TimerTask, long delay, long period)delay 毫秒後固定延遲間隔固定時間的輪詢
scheduleAtFixedRate(TimerTask, long delay, long period)delay 毫秒後固定頻率精確頻率的監控上報
scheduleAtFixedRate(TimerTask, Date, long period)指定 Date 時間固定頻率每日/每週定時批次

代碼示範

Timer timer = new Timer();

// 1. 5 秒後單次執行
timer.schedule(new TimerTask() {
    public void run() { System.out.println("單次任務"); }
}, new Date(System.currentTimeMillis() + 5000));

// 2. 1 秒後開始,每 3 秒固定延遲
timer.schedule(new TimerTask() {
    public void run() { System.out.println("固定延遲"); }
}, 1000, 3000);

// 3. 立即開始,每 2 秒固定頻率
timer.scheduleAtFixedRate(new TimerTask() {
    public void run() { System.out.println("固定頻率"); }
}, 0, 2000);

// 4. 每天凌晨 3 點執行
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 3);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
timer.scheduleAtFixedRate(new TimerTask() {
    public void run() { System.out.println("每日備份"); }
}, cal.getTime(), 24 * 60 * 60 * 1000L);

常見陷阱與對策

  1. 任務拋出未捕獲例外 → Timer 執行緒終止,後續任務全停。
    對策:run() 內包裹 try-catch(Throwable)。
  2. 任務執行時間過長 → 固定頻率模式下會堆積並行執行。
    對策:評估改用 ScheduledExecutorService 或縮短任務邏輯。
  3. 系統時間調整 → 影響基於絕對時間的排程。
    對策:優先使用相對時間(delay/period)或 Quartz 等專業排程框架。

何時選用 Timer vs ScheduledExecutorService

場景推薦
簡單單次/週期任務、舊版本維護Timer
高併發、需取消/重新排程、異常隔離ScheduledExecutorService
分散式、持久化、Cron 運算式、集群Quartz / Spring Batch
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved