timer
即jdk里面提供的java.util.Timer和java.util.TimerTask两个类.
其中TimerTask表示具体的任务,而Timer调度任务.
简单的例子如下:
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest extends TimerTask {
private String jobName = "";
public TimerTest(String jobName) {
super();
this.jobName = jobName;
}
@Override
public void run() {
System.out.println("execute " + jobName);
}
public static void main(String[] args) {
Timer timer = new Timer();
long delay1 = 1 * 1000;
long period1 = 1000;
// 从现在开始 1 秒钟之后,每隔 1 秒钟执行一次 job1
timer.schedule(new TimerTest("job1"), delay1, period1);
long delay2 = 2 * 1000;
long period2 = 2000;
// 从现在开始 2 秒钟之后,每隔 2 秒钟执行一次 job2
timer.schedule(new TimerTest("job2"), delay2, period2);
}
}
当然在生产环境中Timer是不建议使用了的. 它在多线程的环境下, 会存在一定的问题:
1. 当一个线程抛出异常时,整个timer都会停止运行.例如上面的job1抛出异常的话,
job2也不会再跑了.
2. 当一个线程里面处理的时间非常长的话, 会影响其他job的调度.
例如, 如果job1处理的时间要60秒的话, 那么job2就变成了60秒跑一次了.
复制代码
基于上面的原因, timer现在一般都不会再使用了.