timer详解

java code
==
package tf.dt.credit.view;

/**定时处理报文
 *每天凌晨5点自动处理生成报文
 * @author dingting
 * @date 2008-10-20
 */

import java.util.Calendar;
import java.util.Date;
import java.util.TimerTask;
import java.util.Timer;
import tf.dt.credit.view.CreditMessageView;
import tf.dt.credit.database.odbcConnection;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParsePosition;
public class TimeManageMessage {

  public static void main(String[] args) throws InterruptedException {
    // Get the Date corresponding to 11:01:00 pm today.
    try{
      Calendar calendar = Calendar.getInstance();
      calendar.set(Calendar.HOUR_OF_DAY, 10); //控制时
      calendar.set(Calendar.MINUTE, 11); //控制分
      calendar.set(Calendar.SECOND, 0); //控制秒
      Date time = calendar.getTime();
     
      System.out.println("制定执行时间为:"+time);
      Timer timer = new Timer();
      timer.scheduleAtFixedRate(new TimeManageMessage.ManageMessageRun(), time,1000 * 60 * 60 * 24);//3*60*1000); //到的日期是年月日时分秒
     
    }catch(Exception ex){
    ex.printStackTrace();
    }
  }

  static class ManageMessageRun extends TimerTask {
       Date d1 = new Date(System.currentTimeMillis());
     System.out.println("当前执行时间为:aaaaaaaaaa-->:"+d1);
    }
  }
}
===========================================================================================================
1.
timer.scheduleAtFixedRate(new TimeManageMessage.ManageMessageRun(), time,3*60*1000);//1000 * 60 * 60 * 24); //到的日期是年月日时分秒
time=10:11:00
time=运行时间为:10:09:57
执行结果:
当前执行时间为:Tue Nov 18 10:11:00 CST 2008

当前时间为:Tue Nov 18 10:09:57 CST 2008

aaaaaaaaaa  执行时间 10:11:00
 
aaaaaaaaaa  执行时间 10:14:00

aaaaaaaaaa  执行时间 10:17:00

分析:在定时时间之前执行程序,是按照指定时间开始执行,每隔3分钟执行一次

===========================================================================================================
2.timer.scheduleAtFixedRate(new TimeManageMessage.ManageMessageRun(), time,3*60*1000);//1000 * 60 * 60 * 24); //到的日期是年月日时分秒
time=指定时间仍然是10:11:00
time=运行时间为:10:23:12
执行结果:
当前执行时间为:Tue Nov 18 10:11:00 CST 2008
当前时间为:Tue Nov 18 10:23:12 CST 2008

aaaaaaaaaa 执行时间 10:11

aaaaaaaaaa 执行时间 10:14

aaaaaaaaaa 执行时间 10:17

aaaaaaaaaa 执行时间 10:20

aaaaaaaaaa 执行时间 10:23

aaaaaaaaaa 执行时间 10:26

分析:一运行程序会立马执行5次,分别在10:11、10:14、10:17、10:20、10:23
也就是说他会从指定时间开始算做周期,每隔3分钟运行一次程序

===========================================================================================================
3.timer.schedule(new TimeManageMessage.ManageMessageRun(), time,3*60*1000);//1000 * 60 * 60 * 24);
执行结果:
制定执行时间为:Tue Nov 18 10:11:00 CST 2008

当前执行时间为:aaaaaaaaaa-->:Tue Nov 18 10:44:07 CST 2008

当前执行时间为:aaaaaaaaaa-->:Tue Nov 18 10:47:07 CST 2008

当前执行时间为:aaaaaaaaaa-->:Tue Nov 18 10:50:07 CST 2008

分析:schedule方法虽指定执行时间,但是它是从运行时间开始算起,每隔3分钟运行一次,一运行起程序,它会立即执行一遍,10:44。
从10:44开始算起在过3分钟在执行一遍程序,10:47,以此类推。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值