一、简 介
Timer类是一种线程设施,可以用来实现在某一个时间或某一段时间后安排某一个任务执行一次货定期重复执行。该功能要与TimerTask配合使用。TimerTask类用来实现由Timer安排的一次或重复执行的某一个任务。简而言之,Timer可以看成是一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力,一般TimerTask是以匿名类的方式创建的。
二、示例代码
<1> TimerTask不是以匿名类方式创建
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
class MyTask extends TimerTask {
@Override
public void run() {
SimpleDateFormat sdf = null;
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
System.out.println("当前系统时间为:" + sdf.format(new Date()));
}
}
public class TestTask {
public static void main(String[] args) {
Timer t = new Timer();
MyTask mytask = new MyTask();
//t.schedule(task, delay, period)
t.schedule(mytask, 1000, 2000);//1s后开始执行,每隔2s调度一次
try {
Thread.sleep(10000);//等待10s
} catch (Exception e) {
e.printStackTrace();
}
t.cancel();
}
}
<2> TimerTask是以匿名类方式创建
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TestTask {
public static void main(String[] args) {
Timer t = new Timer();
//t.schedule(task, delay, period)
t.schedule(new TimerTask(){
@Override
public void run() {
SimpleDateFormat sdf = null;
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
System.out.println("当前系统时间为:" + sdf.format(new Date()));
}
}, 1000, 2000);
try {
Thread.sleep(10000);
} catch (Exception e) {
e.printStackTrace();
}
t.cancel();
}
}
三、解释说明
以上程序的主要功能是定时打印系统的当前时间。延迟1s后开始执行,每个2秒调度一次,该线程休眠10s.