>  기사  >  Java  >  Java 예약 작업 테스트는 TimerTask를 상속합니다.

Java 예약 작업 테스트는 TimerTask를 상속합니다.

php是最好的语言
php是最好的语言원래의
2018-08-10 15:03:062069검색

먼저, 계획된 작업을 정기적으로 실행하는 기능을 가진 Java 타이머(java.util.Timer)를 소개합니다. 타이머의 간격을 설정하여 미리 지정된 작업(java.util.TimerTask)

을 위해. 예: 매시간 타이머.schedule(TimerTask, 0, 60 * 60 * 1000) 작업을 실행합니다.

schedul() 메소드의 첫 번째 매개변수는 실행해야 하는 작업입니다. 이 클래스의 유형은 java.util.TimerTask입니다. 두 번째 매개변수는 작업을 실행하기 전의 대기 시간입니다. 세 번째 매개변수는 간격(밀리초)입니다.

 /**
  * 定时任务测试类
  * @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");
	}
	
}

하지만:

웹 프로젝트가 시작될 때 타이머가 자동으로 타이밍을 시작할 수 있기를 바라므로 웹 프로젝트 수명 동안 작업이 정기적으로 실행되므로 타이머를 시작하는 클래스는 일반적인 클래스가 될 수 없습니다. 클래스, 여기서는 서블릿 리스너 클래스를 사용하여 타이머를 시작합니다. 구성 파일에 이 리스너를 구성하면 프로젝트가 시작될 때 자동으로 로드되어 실행될 수 있으며 생존 기간은 전체 웹 프로젝트 수명 주기입니다.

태스크 클래스 메인 비즈니스 코드

/**
 * 定时器任务类:即调度任务类
 * @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를 상속하고 그 실행 메소드를 구현합니다

다음은 서버의 시작을 듣고 태스크 스택에 태스크를 추가하는 리스닝 클래스입니다

/**
 * 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("定时器销毁");  
    }  


}

이 클래스는 주로 스케줄러를 설정하고 특정 요구 사항에 따라 작업을 수행하도록 합니다.

작업 리스너 클래스가 구현되었습니다. 다음 단계는 웹에서 리스너를 구성하는 것입니다. 타이머 및 예약된 작업 사용 예

Java 타이머 사용 방법 Timer-java tutorial

위 내용은 Java 예약 작업 테스트는 TimerTask를 상속합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.