Timer、TimerTask實現定時業務處理

來源:互聯網
上載者:User
1、編寫任務
package com.boonya.timer; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; /** * myTask.java * 功能:編寫定時執行的任務 * @author boonya * @version 1.0 2012-10-11 */ public class myTask extends TimerTask{   @Override   public void run() {     // TODO Auto-generated method stub     Date mydate=new Date();     String runTime=new SimpleDateFormat("yyy-MM-dd hh:mm:ss").format(mydate);     System.out.println(runTime+"定時任務正在執行.........");  } } 

2、設定調用簡單任務

package com.boonya.timer; import java.util.Timer; /** * RunMyTask.java * 功能:調用定時執行的任務 * @author boonya * @version 1.0 2012-10-11 */ public class RunMyTask {  public static void execute(){    Timer timer = new Timer();    //一天執行一次    /*Date start=new Date();      start.setDate(start.getDate()+1);      start.setHours(2);      start.setMinutes(0);      start.setSeconds(0);      long l = start.getTime()-System.currentTimeMillis();      timer.schedule(new myTask(), l, 24*1000*60*60);*/    //1分鐘執行一次的任務    timer.schedule(new myTask(), 60000, 60*1000);//task,delay,peroid  } } 

3、編寫複雜任務調度策略的範圍介面

public interface SchedulerService {   void schedule(TimerTask task, long delay);   void schedule(TimerTask task, long delay, long period);   void schedule(TimerTask task, Date firstTime, long period);   void scheduleAtFixedRate(TimerTask task, long delay, long period);   void scheduleAtFixedRate(TimerTask task, Date firstTime, long period); } 

4、實現任務策略介面

public class SchedulerServiceImpl implements SchedulerService {   //延遲多長時間調用一次就陷入線程等待   @Override   public void schedule(TimerTask task, long delay) {     new Timer().schedule(task, delay);   }   //延遲delay微秒調用一次,以後每隔period微秒執行一次   @Override   public void schedule(TimerTask task, long delay, long period) {     new Timer().schedule(task, delay, period);   }   //從firstTime開始執行,每隔period微秒執行一次   @Override   public void schedule(TimerTask task, Date firstTime, long period) {     new Timer().scheduleAtFixedRate(task, firstTime, period);   }   //延遲delay微秒調用一次,以後每隔period微秒執行一次:方法重在執行頻率   @Override   public void scheduleAtFixedRate(TimerTask task, long delay, long period) {     new Timer().scheduleAtFixedRate(task, delay, period);  }  //從firstTime開始執行,每隔period微秒執行一次:方法重在執行頻率  @Override  public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) {    new Timer().scheduleAtFixedRate(task, firstTime, period);  } } 

註:建議只使用schedule方法。
5、調度業務調用

public static void main(String[] args) {    SchedulerService service=new SchedulerServiceImpl();    // execute one time then the thread turn to wait status       service.schedule(new TemplateTask(), 5*1000);    //start from now every 5 seconds execute my task    // service.schedule(new TemplateTask(), new Date(), 5*1000);    //delay 5 seconds then as 5 seconds time-step to execute my task    // service.schedule(new TemplateTask(), 5*1000, 5*1000);    // service.scheduleAtFixedRate(new TemplateTask(), new Date(), 5*1000);    // service.scheduleAtFixedRate(new TemplateTask(), 5*1000, 5*1000); } 

6、web設定項目啟動執行任務
---可以設定一個Servlet在項目啟動時啟動定時任務,web.xml配置如下:

<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>ReadUserListHandler</servlet-name> <servlet-class>com.boonya.test.servlet.ReadUserListHandler</servlet-class> <load-on-startup>5</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ReadUserListHandler</servlet-name> <url-pattern>/servlet/ReadUserListHandler</url-pattern> </servlet-mapping> 

註: <load-on-startup>說明,
在servlet的配置當中,<load-on-startup>5</load-on-startup>的含義是:
標記容器是否在啟動的時候就載入這個servlet。
當值為0或者大於0時,表示容器在應用啟動時就載入這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才載入。
正數的值越小,啟動該servlet的優先順序越高。
7、注意事項
每一個Timer僅對應唯一一個線程。
Timer不保證任務執行的十分精確。
Timer存線上程安全隱患。  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.