java中timer的使用

来源:互联网 发布:dnf刷称号软件 编辑:程序博客网 时间:2024/05/22 15:39

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

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 {@Overridepublic 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);}}