在Java中,Timer
類用于執行一次性或重復的固定延遲任務。它提供了簡單易用的API來安排任務在特定的時間執行。
以下是使用Timer
類的基本步驟:
Timer
類的默認構造函數創建一個新的Timer
實例。Timer timer = new Timer();
schedule(TimerTask task, Date delay)
方法安排一個任務在一次指定的延遲后執行。TimerTask task = new MyTask(); // MyTask是一個實現了TimerTask接口的類
Date delay = new Date(System.currentTimeMillis() + 5000); // 5秒后的時間
timer.schedule(task, delay);
安排重復任務:
使用scheduleAtFixedRate(TimerTask task, Date initialDelay, long period)
或scheduleWithFixedDelay(TimerTask task, Date initialDelay, long delay, boolean lastExecutionTime)
方法安排一個任務以固定的頻率重復執行。
scheduleAtFixedRate
:在任務之間的固定時間間隔內執行任務。如果任務的執行時間超過了間隔時間,那么下一次任務將在當前任務執行完成后立即開始。scheduleWithFixedDelay
:在任務執行完成后等待固定的時間間隔后再執行下一次任務。TimerTask task = new MyRepeatedTask(); // MyRepeatedTask是一個實現了TimerTask接口的類
Date initialDelay = new Date(System.currentTimeMillis() + 5000); // 5秒后的時間
long period = 10000; // 每隔10秒執行一次
timer.scheduleAtFixedRate(task, initialDelay, period);
或者
TimerTask task = new MyRepeatedTask();
Date initialDelay = new Date(System.currentTimeMillis() + 5000);
long delay = 10000; // 在任務執行完成后等待10秒再執行下一次任務
timer.scheduleWithFixedDelay(task, initialDelay, delay);
cancel()
方法取消一個已安排的任務。如果任務尚未開始,那么它將被完全取消;如果任務已經開始但尚未完成,那么它將在下一次執行時間之前被取消。timer.cancel();
注意:Timer
類是線程安全的,但它的方法不是。如果你需要在多線程環境中使用Timer
,請確保你的代碼是線程安全的。
此外,從Java 1.5開始,推薦使用ScheduledExecutorService
接口及其實現類(如ScheduledThreadPoolExecutor
)來替代Timer
類,因為它們提供了更強大和靈活的任務調度功能。