JDK提供的定时器,能够执行一些简单不复杂的任务,若是须要功能强大的定时器Quartz框架。java
定时器任务的执行须要两个基本的类:shell
java.util.Timer安全
java.util.TimerTask框架
要运行一个定时任务,最基本的步骤以下:ide
一、创建一个要执行的任务TimerTask。spa
二、建立一个Timer实例,经过Timer提供的schedule()方法,将TimerTask加入到定时器Timer中,同时设置执行的规则便可。线程
当程序执行了Timer初始化代码后,Timer定时任务就会按照设置去执行。code
Timer中的schedule()方法是有多种重载格式的,以适应不一样的状况。该方法的格式以下:继承
void schedule(TimerTask task, Date time)队列
安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schedule(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
Timer是线程安全的,此类可扩展到大量同时安排的任务(存在数千个都没有问题)。其全部构造方法都启动计时器线程。能够调用cancel() 终止此计时器,丢弃全部当前已安排的任务。purge()今后计时器的任务队列中移除全部已取消的任务。此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务。
TimerTask是一个抽象类,由 Timer 安排为一次执行或重复执行的任务。它有一个抽象方法run()----计时器任务要执行的操做。所以,每一个具体的任务类都必须继承TimerTask类,而且重写run()方法。另外它还有两个非抽象的方法:
boolean cancel()
取消此计时器任务。
long scheduledExecutionTime()
返回此任务最近实际 执行的安排 执行时间。
继承TimerTask,建立执行任务
class TimeTask1 extends TimerTask { @Override public void run() { System.out.println(new Date()); // 实现定时要作的事情 System.out.println("爆炸!"); } }
调度定时器
public class TimerTest1 { public static void main(String[] args) { // 建立一个TimerTask TimerTask task = new TimeTask1(); Timer timer = new Timer(); // 调度,10秒后执行 // timer.schedule(task, 10000); // 10秒后爆炸(只执行一次) timer.schedule(task, 10000, 2000); // 这个是第一次10秒后爆炸,而后每隔2秒爆炸(循环执行)。 } }
执行结果
Tue Dec 22 23:31:23 CST 2015 爆炸! Tue Dec 22 23:31:25 CST 2015 爆炸! Tue Dec 22 23:31:27 CST 2015 爆炸! Tue Dec 22 23:31:29 CST 2015 爆炸! Tue Dec 22 23:31:31 CST 2015 爆炸! ......
建立定时执行任务
class TimeTask2 extends TimerTask { @Override public void run() { System.out.println(new Date()); // 实现定时要作的事情 System.out.println("爆炸!"); new Timer().schedule(new TimeTask2(), 2000); } }
调动定时器
public class TimerTest2 { public static void main(String[] args) { // 建立一个TimerTask TimerTask task = new TimeTask2(); Timer timer = new Timer(); timer.schedule(task, 2000); // 启动一个炸弹,而后该炸弹又启动了一个炸弹,而后循环炸下去。 } }
执行结果
Tue Dec 22 23:38:09 CST 2015 爆炸! Tue Dec 22 23:38:11 CST 2015 爆炸! Tue Dec 22 23:38:13 CST 2015 爆炸! Tue Dec 22 23:38:15 CST 2015 爆炸! ......
建立定时执行任务
class TimeTask3 extends TimerTask { @Override public void run() { System.out.println(new Date()); // 实现定时要作的事情 System.out.println("爆炸!"); } }
调度定时器
public class TimerTest3 { public static void main(String[] args) { Calendar calendar=Calendar.getInstance(); int year=calendar.get(Calendar.YEAR); //获取当前的Year int month=calendar.get(Calendar.MONTH);//获取当前的Month(0-11) int day=calendar.get(Calendar.DAY_OF_MONTH);//获取当前的Day //calendar.set(year, month, day,23,46,15); 表示定时在天天下午23:46:15执行 calendar.set(year, month, day,23,47,15); // 建立一个TimerTask TimerTask task = new TimeTask3(); Timer timer = new Timer(); // 调度 timer.schedule(task,calendar.getTime()); } }
执行结果
Tue Dec 22 23:47:15 CST 2015 爆炸!