使用java自带的times实现定时任务
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现在一般都不会再使用了.