javaee 任务调度 定时任务 schedule_java

任务调度可以实现指定的时间执行某个任务,比如每一分钟执行一次,指定时间执行一次。

MyTimeTask

package com.yyy.schedule;

import java.text.SimpleDateFormat;
import java.util.TimerTask;

public class MyTimeTask extends TimerTask {

	//重写run方法
		@Override
		public void run() {
			// TODO Auto-generated method stub
			
			System.out.println("当前任务的执行时间为:"+new SimpleDateFormat("HH:mm:ss").format(this.scheduledExecutionTime()));
			
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
}

TestTimerServlet

package com.yyy.servlet;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.yyy.schedule.MyTimeTask;

/**
 * Servlet implementation class TestTimerServlet
 */
@WebServlet("/TestTimerServlet")
public class TestTimerServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestTimerServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//创建一个定时器对象  
				Timer timer=new Timer();
				
				//从当前时间开始 每隔1秒钟调用一次任务,每次执行时间为上一次任务开始起向后推一个period间隔
				timer.scheduleAtFixedRate(new MyTimeTask(), new Date(), 1000);
				//timer.schedule(new MyTimeTask(), new Date(), 1000);
				
				//延时指定的时间 执行任务
				//timer.schedule(new MyTimeTask(), 60*1000);
			
				//在指定的时间执行某个任务
//				try {
//					timer.schedule(new MyTimeTask(), new SimpleDateFormat("HH:mm:ss").parse("11:38:00"));
//				} catch (ParseException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

在MyTimeTask 中,我们模拟的任务延时两秒,需要两秒执行完成。

下面的任务调度是在任务开始时,每个1秒执行一次,也就是说下一个任务开始执行时上一个任务还没有执行完。

timer.scheduleAtFixedRate(new MyTimeTask(), new Date(), 1000);

javaee 任务调度 定时任务 schedule_schedule_02

timer.schedule(new MyTimeTask(), new Date(), 1000);指定是在上一任务结束后,每隔一秒开始执行下一个任务

javaee 任务调度 定时任务 schedule_执行时间_03