直播系统开发,每日任务定时刷新

直播系统开发,每日任务定时刷新实现的相关代码

1. Timer

Timer是 JDK 自带的定时任务执行类,可以直接使用 Timer来实现定时任务。这种实现方式比较简单,可以指定首次执行的延迟时间、首次执行的具体日期时间,以及执行频率,能满足日常需要。Timer是线程安全的,因为背后是单线程在执行所有任务。Timer是基于绝对时间调度的,而不是基于相对时间,所以它对系统时间的改变非常敏感。

1.1 使用:

 

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
 * 测试定时任务
 */
public class Test {
    public static void main(String[] args) {
        // 定义一个任务
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Run timerTask:" + new Date());
            }
        };
        // 计时器
        Timer timer = new Timer();
        // 添加执行任务(延迟 1s 执行,每 2s 执行一次)
        timer.schedule(timerTask, 1000, 2000);
    }
}

​几个重要的方法:

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

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

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

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

 

public abstract class TimerTask implements Runnable {
// ......
}

执行结果如下:

 

Run timerTask:Wed Mar 17 10:42:05 CST 2021
Run timerTask:Wed Mar 17 10:42:07 CST 2021
Run timerTask:Wed Mar 17 10:42:09 CST 2021
Run timerTask:Wed Mar 17 10:42:11 CST 2021
Run timerTask:Wed Mar 17 10:42:13 CST 2021
Run timerTask:Wed Mar 17 10:42:15 CST 2021
Run timerTask:Wed Mar 17 10:42:17 CST 2021
Run timerTask:Wed Mar 17 10:42:19 CST 2021
Run timerTask:Wed Mar 17 10:42:21 CST 2021
......

1.2 Timer 缺点分析:

问题 1:任务执行时间长影响其他任务。

开启两个线程,如下:

 


import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
/**
 * 测试定时任务
 */
public class Test {
    public static void main(String[] args) {
        // 定义任务 1
        TimerTask timerTask1 = new TimerTask() {
            @Override
            public void run() {
                try {
                    TimeUnit.SECONDS.sleep(3);// 休眠 3 秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Run timerTask 1:" + new Date());
            }
        };
        // 定义任务 2
        TimerTask timerTask2 = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Run timerTask 2:" + new Date());
            }
        };
        // 计时器
        Timer timer = new Timer();
        // 添加执行任务(延迟 1s 执行,每 3s 执行一次)
        timer.schedule(timerTask1, 1000, 3000);
        timer.schedule(timerTask2, 1000, 3000);
    }
}

 

以上就是直播系统开发,每日任务定时刷新实现的相关代码, 更多内容欢迎关注之后的文章

 

posted @ 2021-11-19 14:14  云豹科技-苏凌霄  阅读(48)  评论(0编辑  收藏  举报