天天看點

Timer 和 TimerTask 例子

啟動Timer的容器類:

‍public class TMServlet extends HttpServlet {

/**

* @category 初始化方法,通過此方法配置定時啟動屬性,以及啟動服務

*/

public void init(ServletConfig context) throws ServletException {

   super.init(context);

   // 掃描周期,以毫秒計,為20分鐘

   //long scanPeriod = 1200000l;

   long scanPeriod = 60000l;

   try {

    // 啟動服務

    new Timer().schedule(

      new TMServiceTask(context.getServletContext()), 0, scanPeriod);

   } catch (RuntimeException e) {

    e.printStackTrace();

    log.error(e);

   }

}

TimerTask的執行類:

‍public class TMServiceTask extends TimerTask {

private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd, HH:mm:ss");

public TMServiceTask(ServletContext servletContext) {}

@Override

public void run() {

   System.out.println(sdf.format(new Date()));

   System.out.println("啟動");

    // ‍要做的操作

     System.out.println("推數結束");

    throw e;

==========================

補充:weblogic下,使用console來啟停服務時,可能導緻前一個servlet沒有完全停止的情況下啟動了一個新的servlet,進而啟動多個timer、運作多個定時任務的線程。如果沒有實作做線程安全的控制,這種情況會導緻嚴重的資料同步問題。

建議使用spring的schedule-job。至少目前來看沒有定時任務不能關閉的問題。

本文轉自 斯然在天邊 51CTO部落格,原文連結:http://blog.51cto.com/winters1224/798987,如需轉載請自行聯系原作者