日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中实现定时功能

發布時間:2023/12/18 编程问答 31 如意码农
生活随笔 收集整理的這篇文章主要介紹了 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中实现定时功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。