Java中的Timer类(java.util.Timer),是最常用的定时类,它可以在隔一段时间之后
再去执行其run方法中设置的代码语句。

使用Timer类定时执行程序有三种方法:
(1)单次定时
new Timer().schedule(task, time);
给Timer类的schedule方法中传入一个TimerTask对象,并重写Task对象的run方法,
将需要定时执行的方法放入其中,然后给schedule方法设置执行时间time(隔几秒执行)。

package cn.edu.hpu.test;

import java.util.Timer;
import java.util.TimerTask;

public class ThreadTests {

public static void main(String[] args) {
new Timer().schedule(new TimerTask(){
@Override
public void run() {
System.out.println("Timer Running...");
}
},1000);
}
}


(2)循环定时


new Timer().schedule(task, firstTime, period);


给Timer类的schedule方法中传入一个TimerTask对象,并重写Task对象的run方法,


将需要定时执行的方法放入其中,然后给schedule方法设置首次执行时间time(隔几秒执行),


循环执行时间period(每多少秒执行一次)。


package cn.edu.hpu.test;

import java.util.Timer;
import java.util.TimerTask;

public class ThreadTests {

public static void main(String[] args) {
new Timer().schedule(new TimerTask(){
@Override
public void run() {
System.out.println("Timer Running...");
}
},1000);
new Timer().schedule(new TimerTask(){
@Override
public void run() {
System.out.println("Timer Running..."+System.currentTimeMillis());
}
},1000,2000);
}
}


执行之后


Timer Running...1474617078660


Timer Running...


Timer Running...1474617080667


Timer Running...1474617082670


Timer Running...1474617084674


Timer Running...1474617086678



第一个定时器只执行了一次就结束了,而后面的一秒后每隔两秒就执行一次。



(3)循环定时的递归实现


我们可以编写一个继承TimerTask的子类,来在run中编写要执行的方法,然后我们在


run方法中继续调用run方法,实现递归定时执行,也就是变相的循环定时:


package cn.edu.hpu.test;

import java.util.Timer;
import java.util.TimerTask;

public class ThreadTests {

public static void main(String[] args) {
new Timer().schedule(new TimerTask(){
@Override
public void run() {
System.out.println("Timer Running...");
}
},1000);

new Timer().schedule(new MyTimerTask(),2000);
}
}
class MyTimerTask extends TimerTask{
@Override
public void run() {
System.out.println("MyTimer Running..."+System.currentTimeMillis());
new Timer().schedule(new MyTimerTask(),2000);
}
}


执行之后


Timer Running...


MyTimer Running...1474617452607


MyTimer Running...1474617454613


MyTimer Running...1474617456617


MyTimer Running...1474617458620


MyTimer Running...1474617460626



第一个定时器只执行了一次就结束了,而后面的一秒后每隔两秒就执行一次。