在Java Web開發中,我們通常需要使用定時器來執行一些周期性的任務,如定時發送郵件,定時備份數據等等。但對于定時器的開始和銷毀,我們需要仔細思考其實現方式,避免出現一些不必要的問題。
Java Web中最常用的定時器為Timer和ScheduledExecutorService。Timer是Java自帶的定時器,而ScheduledExecutorService是JDK1.5中新加入的定時器。
Timer的開始和銷毀可以通過Timer的schedule方法和cancel方法來實現,代碼如下:
Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { // 定時執行的任務 } }, delay, period); // delay為延遲執行的時間,period為周期性執行的時間間隔 timer.cancel(); // 停止定時器
而ScheduledExecutorService的開始和銷毀則需要利用其實現類ScheduledThreadPoolExecutor的execute方法和shutdown方法,代碼如下:
ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(1); // 創建線程池,參數為線程池的大小 executor.scheduleAtFixedRate(new Runnable() { public void run() { // 定時執行的任務 } }, initialDelay, period, TimeUnit.MILLISECONDS); // initialDelay為延遲執行的時間,period為周期性執行的時間間隔 executor.shutdown(); // 關閉線程池
需要注意的是,在使用Timer和ScheduledExecutorService時,我們需要合理地控制其開始和銷毀時機,以避免出現并發或內存泄漏等問題。