java 定时任务Timer


import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;

/**
 *  定时任务
 */
public class MyTimerTask extends TimerTask{
    
    /**
     * 通过构造器注入 Timer对象,任务执行后调用Timer的cancel方法终止计时器
     */
    public MyTimerTask(Timer timer) {
         this.timer = timer;
    }
    Timer timer;

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public void run() {
        // scheduledExecutionTime() : 返回此任务最近实际 执行的安排 执行时间
        System.out.println("执行时间 "+format.format(scheduledExecutionTime()));
       
        /// 测试 任务执行时间超过任务循环周期时使用下面代码
        /* 
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }*/
        
        //如果只执行一次,在这里调用Timer的cancel方法结束任务(调用TimerTask的cancel不管用)
        timer.cancel();  // Timer 终止此计时器

        
//      this.cancel(); // TimerTask 终止此计时器 (不管用)
      
    }
    

}

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Timer;

/**
 * 定时任务 测试
 */
public class MyTimerTest {
    
    public static void main(String[] args) throws ParseException {
        
        //创建计时器
        Timer timer = new Timer();
        //创建任务
        MyTimerTask task = new MyTimerTask(timer);
        System.out.println(LocalDateTime.now());
       
        //执行任务
        // 延迟3000毫秒后执行,且只执行一次(执行后不会自动关闭)
        timer.schedule(task, 3000);
        
        
       //其他方法
         
       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

       //2. 在指定时间执行 ,只执行一次
//       timer.schedule(task,format.parse("2018-07-12 14:21:00"));
        
       //3. 延迟3000毫秒后,每隔2000毫秒执行一次
//       timer.schedule(task, 3000, 2000);
        
       //4. 在指定开始执行,之后每隔2000毫秒执行一次
              /* schedule方法与scheduleAtFixedRate方法 区别
               * 1.如果当前时间晚于指定时间,以当前时间为开始时间
               * 2.如果任务执行时间超过重复间隔时间,则按照实际时间往后顺延(同步执行)
               */
//       timer.schedule(task, format.parse("2018-07-12 14:25:00"), 2000);
       
       //5. 延迟3000毫秒后,每隔2000毫秒执行一次  
//       timer.scheduleAtFixedRate(task, 3000, 2000);
       
       //6. 在指定开始执行,之后每隔2000毫秒执行一次 
            /*schedule方法与scheduleAtFixedRate方法 区别
             * 1.如果当前时间晚于指定时间,则以指定时间开始,并把从指定时间到
             * 当期时间之间该执行的全部补回来
             * 2.如果任务执行时间超过间隔时间,则按照设定间隔时间执行  (异步执行)
             */
//       timer.scheduleAtFixedRate(task, format.parse("2018-07-12 14:57:00"), 2000);
       
       
    }

}


猜你喜欢

转载自blog.csdn.net/liyongbing1122/article/details/81017595