在Java中,Timer
類用于執(zhí)行一次性或重復(fù)的固定延遲任務(wù)。它提供了簡(jiǎn)單易用的API來(lái)安排任務(wù)在特定的時(shí)間執(zhí)行。
以下是使用Timer
類的基本步驟:
Timer
類的默認(rèn)構(gòu)造函數(shù)創(chuàng)建一個(gè)新的Timer
實(shí)例。Timer timer = new Timer();
schedule(TimerTask task, Date delay)
方法安排一個(gè)任務(wù)在一次指定的延遲后執(zhí)行。TimerTask task = new MyTask(); // MyTask是一個(gè)實(shí)現(xiàn)了TimerTask接口的類
Date delay = new Date(System.currentTimeMillis() + 5000); // 5秒后的時(shí)間
timer.schedule(task, delay);
安排重復(fù)任務(wù):
使用scheduleAtFixedRate(TimerTask task, Date initialDelay, long period)
或scheduleWithFixedDelay(TimerTask task, Date initialDelay, long delay, boolean lastExecutionTime)
方法安排一個(gè)任務(wù)以固定的頻率重復(fù)執(zhí)行。
scheduleAtFixedRate
:在任務(wù)之間的固定時(shí)間間隔內(nèi)執(zhí)行任務(wù)。如果任務(wù)的執(zhí)行時(shí)間超過(guò)了間隔時(shí)間,那么下一次任務(wù)將在當(dāng)前任務(wù)執(zhí)行完成后立即開(kāi)始。scheduleWithFixedDelay
:在任務(wù)執(zhí)行完成后等待固定的時(shí)間間隔后再執(zhí)行下一次任務(wù)。TimerTask task = new MyRepeatedTask(); // MyRepeatedTask是一個(gè)實(shí)現(xiàn)了TimerTask接口的類
Date initialDelay = new Date(System.currentTimeMillis() + 5000); // 5秒后的時(shí)間
long period = 10000; // 每隔10秒執(zhí)行一次
timer.scheduleAtFixedRate(task, initialDelay, period);
或者
TimerTask task = new MyRepeatedTask();
Date initialDelay = new Date(System.currentTimeMillis() + 5000);
long delay = 10000; // 在任務(wù)執(zhí)行完成后等待10秒再執(zhí)行下一次任務(wù)
timer.scheduleWithFixedDelay(task, initialDelay, delay);
cancel()
方法取消一個(gè)已安排的任務(wù)。如果任務(wù)尚未開(kāi)始,那么它將被完全取消;如果任務(wù)已經(jīng)開(kāi)始但尚未完成,那么它將在下一次執(zhí)行時(shí)間之前被取消。timer.cancel();
注意:Timer
類是線程安全的,但它的方法不是。如果你需要在多線程環(huán)境中使用Timer
,請(qǐng)確保你的代碼是線程安全的。
此外,從Java 1.5開(kāi)始,推薦使用ScheduledExecutorService
接口及其實(shí)現(xiàn)類(如ScheduledThreadPoolExecutor
)來(lái)替代Timer
類,因?yàn)樗鼈兲峁┝烁鼜?qiáng)大和靈活的任務(wù)調(diào)度功能。