定时任务定义
定时任务调度:基于给定的时间点、给定的时间间隔或者给定的执行次数自动执行的任务。
JDK定时任务Timer
1.JDK定时任务工具类Timer
Timer:有且仅有一个后台线程对多个业务线程进行定时、定频率的调度;Timer定时任务(schedule)的四种用法:后台线程Timer——业务线程TimerTask
- schedule(task,time)——在时间等于或者超过time的时候执行且仅执行一次task;(schedule1代码)
- schedule(task,time,period)——时间等于或者超过timer时首次执行task,之后每隔period毫秒重复执行一次task;(schedule2代码)
- schedule(task,delay)——等待delay毫秒后执行且仅执行一次task;(schedule3代码)
- schedule(task,delay,period)——等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task;(schedule4代码)
- scheduleAtFixedRate(task,time,period)——时间等于或者超过time时首次执行task,之后每隔period毫秒重复执行一次task;(atFixedRate1代码)
- scheduleAtFixedRate(task,delay,period)——等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task;(atFixedRate2代码)
2.创建TimerTask业务线程实现类JdkTimerTask:
package com.luna.timer.jdk;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimerTask;
public class JdkTimerTask extends TimerTask{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public JdkTimerTask() {
}
@Override
public void run() {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current exec time is:"+sf.format(calendar.getTime()));
System.out.println("Current exec name is:"+name);
}
}
3.创建后台线程Timer类的实现JDKTimer:
package com.luna.timer.jdk;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
public class JdkTimer {
public static void main(String[] args) {
Timer timer = new Timer();
JdkTimerTask timerTask = new JdkTimerTask();
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current exec time is:"+sf.format(calendar.getTime()));
//获取当前时间3秒之后的时间,各个任务独立运行避免相互影响
calendar.add(Calendar.SECOND, 3);
//