schedule(TimerTask task, Date time)設定指定任務task在指定時間time執行。
cancel()方法結束這個定時器。
schedule(TimerTask task, long delay, long period)方法設定指定任務task在指定延遲delay後進行固定延遲peroid的執行。
scheduleAtFixedRate(TimerTask task, long delay, long period)方法設定指定任務task在指定延遲delay後進行固定頻率peroid的執行。
要實現一個定時任務,運用java中的Timer和TimerTask類可以非常容易實現實時調用處理函數。這兩個類使用起來非常方便,可以完成我們對定時器的絕大多數需要。
看個簡單的例子:
import java.io.IOException;
import java.util.Timer;
public class TimerTest {
public static void main(String[] args){
Timer timer = new Timer();
timer.schedule(new MyTask(), 1000, 2000);//在1秒後執行此任務,每次間隔2秒,如果傳遞一個Data參數,就可以在某個固定的時間執行這個任務.
while(true){//這個是用來停止此任務的,否則就一直循環執行此任務了
try {
int ch = System.in.read();
if(ch-'c'==0){
timer.cancel();//使用這個方法退出任務
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
static class MyTask extends java.util.TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("________");
}
}
}
==========Java定時器在Web中的應用==========
在web中,定時器的啓動一般隨web server的啓動而啓動,一般有兩種方法.
方法一:在web.xml裏配置一個Servlet,並設置其隨web server的啓動而啓動。然後在該Servlet的init()方法裏啓動定時器,在destory()方法裏銷燬定時器。
方法二:在web.xml裏配置一個Listener,然後在該Listener的初始化方法裏啓動定時器,在其銷燬的方法朝左銷燬定時器。
在servlet中啓動定時器
java 代碼
import java.io.IOException;
import java.util.Timer;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
public class ConvergeDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private Timer timer1 = null;
private Task task1;
/**
* Constructor of the object.
*/
public ConvergeDataServlet() {
super();
}
/**
* Destruction of the servlet.
*/
public void destroy() {
super.destroy();
if(timer1!=null){
timer1.cancel();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
// init方法啓動定時器
public void init() throws ServletException {
ServletContext context = getServletContext();
// (true爲用定時間刷新緩存)
String startTask = getInitParameter("startTask");
// 定時刷新時間(分鐘)
Long delay = Long.parseLong(getInitParameter("delay"));
// 啓動定時器
if(startTask.equals("true")){
timer1 = new Timer(true);
task1 = new Task(context);
timer1.schedule(task1, delay * 60 * 1000, delay * 60 * 1000);
}
}
}
定時執行操作
java 代碼
/**
*
* @author callan
*/
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class Task extends TimerTask{
private ServletContext context;
private static boolean isRunning = true;
public Task(ServletContext context){
this.context = context;
}
@Override
public void run() {
if(isRunning){
}
}
}
在web.xml配置這個servlet爲服務啓動時就調用servlet
<servlet></servlet>
< servlet >
< servlet-name >taskservlet< / servlet-name >
< servlet-class >com.task< /servlet-class >
< init-param >
< param-name >startTask< /param-name >
< param-value >true< /param-value >
< /init-param >
< init-param >
< param-name >intervalTime< /param-name >
< param-value >1< /param-value >
< /init-param >
< load-on-startup >300< /load-on-startup >
< /servlet >
<servlet></servlet>