主要涉及到两个类,
一个是java.util.Timer,一个是java.util.TimerTask。
Timer:
是一种工具,用Timer操作线程,可以在后台执行线程中的任务,可以控制这个任务执行一次,或者定期重复执行。
与每个Timer对象对应的是单个后台线程,用于顺序的执行所有计时器任务。
如果以外终止了Timer正在执行的线程,例如调用了这个线程的stop方法,那么以后所有的该计时器的任务的尝试都将导致IllegalStateException,就好像计时器调用了cancel方法一样。
Timer类是线程安全的,多个线程可以共享单个Timer对象而无需进行外部同步。
构造方法摘要 | ||
Timer() | ||
Timer(boolean isDaemon) | ||
Timer(String name, boolean isDaemon) | ||
方法摘要 | ||
void | cancel() | |
int | purge() | |
void | ||
void | schedule(TimerTask task, Date firstTime, long period) | |
void | ||
void | schedule(TimerTask task, long delay, long period) | |
void | scheduleAtFixedRate(TimerTask task, Date firstTime, long period) | |
void | scheduleAtFixedRate(TimerTask task, long delay, long period) |
TimerTask类:
就是Timer需要安排的任务。
构造方法摘要 | |||
protected | TimerTask() | ||
方法摘要 | |||
boolean | cancel() | ||
abstract void | run() | ||
long | scheduledExecutionTime() |
示例:
public class TimerTest {
public static void main(String[] args) {
//调用schedule方法执行任务
new Timer().schedule(new TimerTask(){
public void run() {
System.out.println("boom...");
}
},10000,3000);//过10秒执行,之后每隔3秒执行一次
//每隔1秒打印一次时间
while(true) {
System.out.println(new Date().getSeconds());
try{
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
示例2
需求:2秒后执行,再过4秒执行,再过2秒执行,再过4秒执行...
public class TimerTest {
private static int count = 0;
public static void main(String[] args) {
class MyTimerTask extends TimerTask {
public void run(){
count = (count + 1) % 2;
System.out.println("boom...");//2.2秒后打印...... 4.4秒后再打印
new Timer().schedule(new MyTimerTask(),2000+2000*count);//3.4秒后执行
}
}
new Timer().schedule(new MyTimerTask(),2000);//1.过2秒执行
while(true) {
System.out.println(new Date().getSeconds());
try{
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
递归执行......