首頁 >Java >java教程 >java定時任務測試 繼承TimerTask

java定時任務測試 繼承TimerTask

php是最好的语言
php是最好的语言原創
2018-08-10 15:03:062110瀏覽

 首先,介紹Java計時器(java.util.Timer)有定時執行排程任務的功能,透過設定計時器的間隔時間,會自動在此間隔時間後執行預先安排好的任務(java.util. ​​TimerTask)

如: 每隔一個小時執行任務timer.schedule(TimerTask, 0, 60 * 60 * 1000)。

schedule()方法的

第一個參數是需要執行的任務,此類的類型為java.util.TimerTask,

第二個參數為執行任務前等待時間,此處0表示不等待,第三個參數為間隔時間,單位為毫秒。

 /**
  * 定时任务测试类
  * @author admin
  *
  */
public class TimerScheduleDemo extends TimerTask { 
	 
	public TimerScheduleDemo() { 
	} 
	 
	@Override 
	public void run() { 
		print();
	} 
	 
	public static void main(String[] args) { 
		Timer timer = new Timer(); 
		long delay1 = 1 * 1000; 
		long period1 = 1000; 
		// 从现在开始 1*1000 秒钟之后,每隔 1 秒钟执行一次 
		timer.schedule(new TimerScheduleDemo(), delay1, period1); 
		/*long delay2 = 2 * 1000; 
		long period2 = 2000; 
		// 从现在开始 2 秒钟之后,每隔 2 秒钟执行一次 
		timer.schedule(new TimerScheduleDemo(), delay2, period2); */
	} 
	
	public static void print(){
		System.out.println("method start");
	}
	
}

但是: 

由於我們希望當Web工程啟動時,定時器能自動開始計時,這樣在整個Web工程的生命期裡,就會定時的執行任務,因此啟動定時器的類別不能是一般的類,此處用Servlet的監聽器類來啟動定時器,通過在配置文件裡配置此監聽器, 讓其在工程啟動時自動加載運行,存活期為整個Web工程生命期。

任務類別 主要的業務代碼

/**
 * 定时器任务类:即调度任务类
 * @author admin
 */
public class DelFileTask extends TimerTask{


    private static boolean isRunning = false;    
    
    private ServletContext context = null;    
    
    public DelFileTask() {  
        super();  
    }  
      
    public DelFileTask(ServletContext context) {    
        this.context = context;    
    }    
    @Override  
    public void run() {  
          
        if (!isRunning) {  
               
            context.log("开始执行指定任务");   
            /** 
             * 自己的业务代码 
             */  
              
            isRunning = false;    
            context.log("指定任务执行结束");  
        } else {    
            context.log("上一次任务执行还未结束");    
       }  
    }  
	 
}

這個類別主要是繼承TimerTask並實現它的run 方法

下面就是監聽類別了監聽伺服器的啟動並將任務添加到任務堆疊

/**
 * servlet监听器:监听服务启动时执行调度任务
 * @author admin
 *
 */
public class ContextListener implements ServletContextListener{

	public ContextListener() { 
		
    }  
      
     private java.util.Timer timer = null;    
       
    /** 
     * 初始化定时器 
     * web 程序运行时候自动加载   
     */  
    @Override  
    public void contextInitialized(ServletContextEvent arg0) {  
          
    	/**
    	 * 设置一个定时器  
    	 */
        timer = new java.util.Timer(true);    
            
        arg0.getServletContext().log("定时器已启动");   
    
        /**
         * 定时器到指定的时间时,执行某个操作(如某个类,或方法)  
         */
        //设置执行时间  
        Calendar calendar =Calendar.getInstance();  
        int year = calendar.get(Calendar.YEAR);  
        int month = calendar.get(Calendar.MONTH);  
        int day =calendar.get(Calendar.DAY_OF_MONTH);//每天  
        //定制每天的16:10:00执行,  
        calendar.set(year, month, day, 16, 10, 00);  
        Date date = calendar.getTime();  
        System.out.println(date);  
        
        int period = 1000;  
        //每天的date时刻执行task,每隔persion 时间重复执行  
        timer.schedule(new DelFileTask(arg0.getServletContext()), date, period);
        
        //在 指定的date时刻执行task, 仅执行一次  
        //timer.schedule(new DelFileTask(arg0.getServletContext()), date);  
          
        arg0.getServletContext().log("已经添加任务调度表");    
          
    }  
  
    /** 
     * 销毁 
     */  
    @Override  
    public void contextDestroyed(ServletContextEvent arg0){  
  
        timer.cancel();  
        arg0.getServletContext().log("定时器销毁");  
    }  


}

這個類別主要是設定一個調度器並讓他按一定的要求去執行任務。

任務類別監聽器類別都實現了下一步就是在web.xml 配置監聽器了 

  <listener>
  	<listener-class>ContextListener</listener-class>
  </listener>

到了這裡  一個簡單的定時器基本上實現了也能跑通了

相關推薦:

Java 中計時器和定時任務所使用的實例

如何使用Java計時器Timer-java教學

以上是java定時任務測試 繼承TimerTask的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn