本章目标

了解定时调度的作用

掌握Timer和TimerTask类的作用

 

Timer类

Timer类是一种线程设施,可以用来实现在某一个时间或某一段时间后,安排某一个任务执行一次,或定期重复执行。该功能要与TimerTask配合使用。TimerTask类用来实现由Timer安排的一次或重复执行的某一个任务。

每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则可能会延迟后续任务的执行,而这些后续的任务就有可能堆在一起,等到该任务完成后才能快速连续执行。

 

Timer类中的常用方法

定时调度_java


 

schedule()与scheduleAtFixedRate()方法的区别

两者的区别在与重复执行任务时,对于时间间隔出现延迟的情况处理:

——schedule()方法的执行时间间隔永远是固定的,如果之前出现了延迟的情况,之后也会继续按照设定好的的间隔时间来执行

——scheduleAtFixedRate()方法可以根据出现的延迟时间自动调整下一次间隔的执行时间 

 

TimerTask类

要想执行具体的任务,则必须使用TimerTask类。TimerTask类是一个抽象类,如果要使用该类,需要自己建立一个类来继承此类,并实现其中的抽象方法。 

定时调度_java_02


 

定时操作  —— 建立TimerTask的子类 

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;
public class MyTask extends TimerTask {//任务调度类要继承 TimerTask
	public void run(){
		SimpleDateFormat sdf = null;
		sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		System.out.println("当时系统时间为:"+sdf.format(new Date()));
	}
}

 

定时操作  —— 建立测试类,进行任务调度 

import java.util.Timer;
public class TestTask {
	public static void main(String[] args) {
		Timer t = new Timer();//建立 Timer 类对类
		MyTask mytask = new MyTask();//定义任务
		t.schedule(mytask, 1000,2000);//设置任务的执行,1 秒后开始,每 2 秒重复
	}
/* 结果:
 * 当时系统时间为:2014-06-22 19:08:08.786
 * 当时系统时间为:2014-06-22 19:08:10.677
 * 当时系统时间为:2014-06-22 19:08:12.677
 * 当时系统时间为:2014-06-22 19:08:14.677
 * 当时系统时间为:2014-06-22 19:08:16.677
 * */
}