java中timer的使用

使用案例一:启动时不执行,在每天固定的时间执行

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
 * 定时任务测试
 */
public class TaskTest {
	//日期格式化到天
	private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
	//日期格式化到秒
	private static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
	//一天的毫秒表示
	private static final long DAY = 24 * 60 * 60 * 1000;
	/**
	 * 定时任务.
	 * @param timeStr
	 */
	public static void task(String timeStr) throws Exception {
		// 获得当天的日期
		Date date = new Date();
		// 定义开始时间字符串
		timeStr = DATE_FORMAT.format(date) + " "+ timeStr;
		// 获得当天的指定时间的date对象
		date = DATE_TIME_FORMAT.parse(timeStr);
		// 判断今天的执行时间是否已经过去,如果过去则改为明天
		if (date.getTime() < System.currentTimeMillis()) {
			date = new Date(date.getTime() + DAY);
		}
		Timer timer = new Timer();
		timer.schedule(new MyTask(), date, DAY);
	}
	/**
	 * 定时任务信息
	 */
	private static class MyTask extends TimerTask {
		@Override
		public void run() {
			System.out.println(new Date()+"----------------");
		}
	};
	/**
	 * 定义测试.
	 */
	public static void main(String[] args) throws Exception {
		// 每天早上一点半执行,需要提前两分钟被运行
		String timeStr = "01:30:00";
		task(timeStr);
	}
}

方案二:启动不执行,在指定的某个时间执行一次,尔后固定频率执行

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
 * 测试
 */
public class TaskTest {
	//格式化到日
	private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
	//格式化到秒
	private static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
	/**
	 * 定时任务.    
	 * @param timeStr
	 * @param period
	 * remark <br>
	 */
	public static  void task(String timeStr,long period) throws Exception{
		Date date = new Date();
		//定义开始时间字符串
		timeStr = DATE_FORMAT.format(date)+" "+timeStr;
		//获得当天的指定时间的date对象
		date = DATE_TIME_FORMAT.parse(timeStr);
		//判断今天的执行时间是否已经过去,如果过去则改为明天
		if(date.getTime()<System.currentTimeMillis()){
		 date = new Date(date.getTime()+24*60*60*1000);
		}
		Timer timer = new Timer();
		timer.schedule(new MyTask(),date,period); 
	}
	/**
	 * 定时任务信息
	 * @version 1.0
	 */
	private static class MyTask extends TimerTask{
	  @Override
	  public void run() {
		System.out.println(new Date() + "----------------");
	  }
	 };
	/**
	 * 定义测试.    
	 * @param args
	 * @throws Exception
	 * remark <br>
	 */
	public static void main(String[] args) throws Exception {
	  //每天晚上八点执行,需要提前两分钟被运行
	  String timeStr = "20:00:00";
	  long period = 1000;//ms
	  task(timeStr,period);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值