java中实现定时功能
網上資料:
我們可以使用Timer和TimerTask類在java中實現定時任務,詳細說明如下:
1、基礎知識
java.util.Timer
一種線程設施,用于安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行。此類是線程安全的:多個線程可以共享單個 Timer 對象而無需進行外部同步。
java.util.TimerTask
由 Timer 安排為一次執行或重復執行的任務。
2、示例代碼
該示例實現這樣一個功能,在系統運行期間,每30分鐘,系統自動檢查連接池中的可用連接數,并輸出到日志中。
首先創建一個需要定時執行的任務類,這個任務類需要繼承TimerTask,然后重寫run()方法,run()方法體中的代碼就是定時需要執行的操作,在本demo中,就是獲取連接池中當前可用連接數,并輸出到日志中,具體實現代碼如下:
public class TaskAvailableConnectNumber extends TimerTask {
private Logger log = Logger.getLogger(TaskAvailableConnectNumber.class);
private ConnectionPool pool=ConnectionPool.getInstance();
@Override
publicvoid run() {
log.debug("當前連接池中可用連接數"+pool.getAvailableConnectNumber());
}
}
下面定義一個監聽器,負責在應用服務器啟動時打開定時器,監聽器需要實現ServletContextListener接口,并重寫其中的contextInitialized()和contextDestroyed()方法,代碼如下:
public class OnLineListener implements ServletContextListener{
private Logger log = Logger.getLogger(OnLineListener.class);
Timer timer = null;
//在應用服務器啟動時,會執行該方法
publicvoid contextInitialized(ServletContextEvent arg0) {
//創建一個定時器,用于安排需要定時執行的任務。
timer = new Timer();
//為定時器安排需要定時執行的任務,該任務就是前面創建的任務類TaskAvailableConnectNumber,并指定該任務每30分鐘執行一次。
timer.schedule(new TaskAvailableConnectNumber(), 0, 30*60*1000);
log.debug("啟動定時器");
}
//應用服務器關閉時,會執行該方法,完成關閉定時器的操作。
public void contextDestroyed(ServletContextEvent arg0) {
if(timer!=null){
timer.cancel();//關閉定時器
log.debug("-----定時器銷毀--------");
}
}
}
監聽器要想正常運行,需要在web.xml文件中進行配置,配置信息如下:
<!-- 監聽器配置開始 -->
<listener>
<listener-class>
cn.sdfi.listen.OnLineListener
</listener-class>
</listener>
<!-- 監聽器配置結束 -->
以上步驟完成后,一個簡單的定時器就算開發完成了。
總結
以上是生活随笔為你收集整理的java中实现定时功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: testNG之参数化测试
- 下一篇: 宿主机ping不通虚拟机cenos7