scheduleAtFixedRate 和schedule

scheduleAtFixedRate 和schedule最近整了一个 TimerTask 要求每天定点执行某一任务 code java importjava util Calendar importjava util Date importjava util Timer importjava util TimerTask importjavax servlet ServletConte imp

最近整了一个TimerTask 要求每天定点执行某一任务.


import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;

public class DoLogListener implements ServletContextListener {
Timer t = null;

public void contextInitialized(ServletContextEvent sce) {
Calendar c = null;
c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 00);
c.set(Calendar.MINUTE, 01);
c.set(Calendar.SECOND, 00);
Date date = c.getTime();
t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
doSomething();
}
}, date, 24 * 60 * 60 * 1000);
//t.schedule(new TimerTask() {
// @Override
// public void run() {
// doSomething();
// }
//}, date, 24 * 60 * 60 * 1000);

}

public void contextDestroyed(ServletContextEvent sce) {
t.cancel();

}

public void doSomething() {
System.out.println("sb")
}
}













































如果服务在当天00:01分以前被启动,两个方法都会在在00:01分时执行任务.
第二次任务执行时间都是00:01+24 * 60 * 60 * 1000,如果过了这个点后启服务两个方法都会马上执行任务.但第二次任务被执行的时间就是差别了,scheduleAtFixedRate是在你设置的date的基础上加24 * 60 * 60 * 1000这个时间段后执行而,schedule是在服务启动时间的基础上加24 * 60 * 60 * 1000这个时间段后执行.


public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(2009, 04, 20, 11, 50,00);
Date date = c.getTime();
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("aaaaaaa");
}
}, date,2*60*1000);
}












如果你在11:55:00启动服务scheduleAtFixedRate在服务启动时任务就会被执行3次.
11:50:00 第一次
11:52:00 第二次
11:54:00 第三次
第四次的执行时间是:11:56:00
如果用schedule在服务启动时任务只会被执行1次11:50:00第二次执行的时间是11:57:00.











版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233189.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号