java 定时任务的实现_Java定时任务的简单实现

package com.weiyuanit.test1;

import java.util.Date;

import java.util.TimerTask;

/***********************

* @author:han

* @version:1.0

* @created:2013-11-20

***********************

*/

public class MyTask extends TimerTask {

@Override

public void run() {

//此处添加具体任务代码

try {

System.out.println(" =============== call at :" + (new Date()));

} catch (Exception e) {

System.out.println("-------------解析信息发生异常--------------");

e.printStackTrace();

}

}

}

package com.weiyuanit.test1;

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

/***********************

* 定时任务测试

* @author:han

* @version:1.0

* @created:2013-11-20

***********************

*/

public class MyListener implements ServletContextListener{

private Timer timer = null;

//时间间隔

private static final long PERSIOD_DAY = 24 * 60 * 60 * 1000;

public void contextDestroyed(ServletContextEvent sce) {

// TODO Auto-generated method stub

timer.cancel();

}

public void contextInitialized(ServletContextEvent sce) {

timer = new Timer(true);

//设置任务计划,启动和间隔时间

//timer.schedule(new MyTask(),0, 86400000);

MyTask myTask = new MyTask();

//1.立刻开始执行myTask的任务,只执行一次

// timer.schedule(myTask, new Date());

//2.立刻开始执行myTask的任务,执行完本次任务,隔3秒再执行一次

// timer.schedule(myTask, new Date(),3000);

//3.5秒钟后开始执行myTask的任务,只执行一次

// timer.schedule(myTask, 5000);

//4.5秒钟后开始执行myTask的任务,执行完本次任务后,隔3秒再执行一次

// timer.schedule(myTask, 5000,3000);

//5.立刻开始执行myTask任务,每隔3秒再执行一次

// timer.scheduleAtFixedRate(myTask, new Date(), 3000);

//6.秒钟后开始执行myTask任务,每隔3秒执行一次

// timer.schedule(myTask, 5000,3000);

/**

* 需要注意的是scheduleAtFixedRate和schedule在参数完全相同的情况下,执行效果是不同的。

* 上面例子中任务只是打印一个字符串,比较简单。

* 但如果任务比较复杂,或者由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,

* 则scheduleAtFixedRate方法将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”;

* 而schedule方法的后续执行也将被延迟。

* 所以,在长期运行中,scheduleAtFixedRate执行的频率将正好是指定周期的倒数,schedule 执行的频率一般要稍慢于指定周期的倒数。

另外,TimerTask的构造函数是protected,所以无法再类中直接new一个TimerTask,而只能写一个类继承TimerTask。

*/

/* try {

Thread.sleep(10000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(" 1 ");

//timer.cancel();//结束任务执行,程序并不终止

System.out.println(" 2 ");*/

//7.定制每日夜里2:00执行方法

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.HOUR_OF_DAY, 14);

calendar.set(Calendar.MINUTE, 24);

calendar.set(Calendar.SECOND, 0);

//第一次执行定时任务的时间

Date date = calendar.getTime();

/**

* 如果第一次执行定时任务的时间 小于 当前的时间,

* 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。

* 如果不加一天,任务会立即执行

*/

if (date.before(new Date())) {

date = this.addDate(date, 1);

}

//timer.schedule(myTask, date,PERSIOD_DAY);

timer.schedule(myTask, date,5000);

/**

* 注意事项:

* 一定要注意时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后发布程序

* 或是重启过服务。那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点再执行。

* 为了避免这种情况发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,

* 就在此基础上加一天。

*/

}

/**

* 增加或减少天数

* *******************

* @author: han

* 2013-11-21

* *******************

* @param date

* @param num

* @return

*/

public Date addDate(Date date,int num) {

Calendar startDate = Calendar.getInstance();

startDate.setTime(date);

startDate.add(Calendar.DAY_OF_MONTH, num);

return startDate.getTime();

}

}

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

index.jsp

com.weiyuanit.test1.MyListener

可以去下载:java定时任务小例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值