使用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现在一般都不会再使用了.

原文链接:https://juejin.im/post/6844904002606350343
posted @ 2020-09-16 15:19  uzxin  阅读(321)  评论(0编辑  收藏  举报