文章目录
任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。
四种任务调度的 Java 实现:
- Timer
- ScheduledExecutor
- spring提供的定时任务
- 开源工具包 Quartz
开源工具包和Spring提供的定时任务实现在后面的章节介绍,本文主要介绍JDK中提供的定时任务的实现,此外,为结合实现复杂的任务调度,本文还将介绍 Calendar 的一些使用方法。
Timer
java.util.Timer 是最简单的一种实现任务调度的方法,下面给出一个具体的例子
package huyp.task.timer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* 任务实现类
* */
public class TimerTest extends TimerTask{
private String jobName="";
private static String format = "yyyy-MM-dd HH:mm:ss";
static DateFormat dateFormat = new SimpleDateFormat(format);
public TimerTest(String jobName) {
super();
this.jobName=jobName;
}
@Override
public void run() {
System.out.println("now time"+dateFormat.format(new Date())+" execute "+jobName);
System.out.println("当前线程"+Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Timer timer=new Timer();
long delay1=1*1000;
long period1=1000;
System.out.println("now time"+dateFormat.format(new Date()));
//从现在开始1s之后,每隔1s执行一次job1
timer.schedule(new TimerTest("job1"), delay1,period1);
long delay2=2*1000;
long period2=2000;
//从现在开始2s之后,每隔2s执行一次job2
System.out.println("now time"+dateFormat.format(new Date()));
timer.schedule(new Timer2Test("job2"), delay2,period2);
}
}
package huyp.task.timer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;
public class Timer2Test extends TimerTask{
private String jobName = "";
private String for