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 块 3e.printStackTrace(); }*/
//如果只执行一次,在这里调用Timer的cancel方法结束任务(调用TimerTask的cancel不管用) timer.cancel();
// Timer 终止此计时器 // this.cancel(); // TimerTask 终止此计时器 (不管用) } }
//Java初高级一起学习分享,喜欢的话可以我的学习群64弍46衣3凌9,或加资料群69似64陆0吧3
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"); // 在指定时间执行 ,只执行一次 30 // timer.schedule(task,format.parse("2018-07-13 14:21:00")); //延迟3000毫秒后,每隔2000毫秒执行一次 // timer.schedule(task, 3000, 2000); //在指定开始执行,之后每隔2000毫秒执行一次
/* schedule方法与scheduleAtFixedRate方法
区别
* 1.如果当前时间晚于指定时间,以当前时间为开始时间
* 2.如果任务执行时间超过重复间隔时间,则按照实际时间往后顺延(同步执行) */
// timer.schedule(task, format.parse("2018-07-13 14:25:00"), 2000);
//延迟3000毫秒后,每隔2000毫秒执行一次 // timer.scheduleAtFixedRate(task, 3000, 2000);
//在指定开始执行,之后每隔2000毫秒执行一次
/*schedule方法与scheduleAtFixedRate方法
区别
* 1.如果当前时间晚于指定时间,则以指定时间开始,并把从指定时间到
* 当期时间之间该执行的全部补回来
* 2.如果任务执行时间超过间隔时间,则按照设定间隔时间执行 (异步执行) */
// timer.scheduleAtFixedRate(task, format.parse("2018-07-12 14:57:00"), 2000); } }
网友评论