任务调度可以实现指定的时间执行某个任务,比如每一分钟执行一次,指定时间执行一次。
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);
timer.schedule(new MyTimeTask(), new Date(), 1000);指定是在上一任务结束后,每隔一秒开始执行下一个任务