不用任何框架,Java 就能实现定时任务的 3 种方法!

1、 sleep

这也是我们最常用的 sleep 休眠大法,不只是当作休眠用,我们还可以利用它很轻松的能实现一个简单的定时任务。


实现逻辑:


新开一个线程,添加一个 for/ while 死循环,然后在死循环里面添加一个 sleep 休眠逻辑,让程序每隔 N 秒休眠再执行一次,这样就达到了一个简单定时任务的效果。


实现代码如下:

/**
 * 休眠实现定时任务
 * 来源公众号:Java技术栈
 */
private static void sleepTask() {
    new Thread(() -> {
        while (true) {
            System.out.println("hi, 欢迎关注:Java技术栈");

            try {
                // 每隔3秒执行一次
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

这种方式比较傻瓜化了,只能按固定频率运行,不能指定具体运行的时间。


另外,上面的箭头语法,栈长使用了 JDK 8 中的 Lambda 表达式,这里就不再撰述了,Java 8 系列实战教程我都写了一堆了,不清楚的可以关注公众号:Java技术栈,在后台回复 "java" 阅读,我都整理好了。


2、Timer

来看下 JDK 自带的 java.util.Timer 类:


不用任何框架,Java 就能实现定时任务的 3 种方法!


JDK 1.3 就内置了 java.util.Timer 类,可以用来调度 java.util.TimerTask 任务。


不用任何框架,Java 就能实现定时任务的 3 种方法!


几个重要的方法:


schedule:开始调度任务,提供了几个包装方法;

cancle:终止任务调度,取消当前调度的所有任务,正在运行的任务不受影响;

purge:从任务队列中移除所有已取消的任务;

另外,java.util.TimerTask 就是实现了 Runnable 接口,具体任务逻辑则是在 run 方法里去实现。


不用任何框架,Java 就能实现定时任务的 3 种方法!


实现代码如下:

/**
 * timer定时任务
 * 来源公众号:Java技术栈
 */
private static void timerTask() throws InterruptedException {
    Timer timer = new Timer();

    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            System.out.println("hi, 欢迎关注:Java技术栈");
        }
    };

    // 第一次任务延迟时间
    long delay = 2000;

    // 任务执行频率
    long period = 3 * 1000;

    // 开始调度
    timer.schedule(timerTask, delay, period);

    // 指定首次运行时间
// timer.schedule(timerTask, DateUtils.addSeconds(new Date(), 5), period);

    Thread.sleep(20000);

    // 终止并移除任务
    timer.cancel();
    timer.purge();
}
上一篇:云存储软件需要做点什么


下一篇:云存储软件需要做点什么?