直播系统开发,每日任务定时刷新
直播系统开发,每日任务定时刷新实现的相关代码
1. Timer
Timer是 JDK 自带的定时任务执行类,可以直接使用 Timer来实现定时任务。这种实现方式比较简单,可以指定首次执行的延迟时间、首次执行的具体日期时间,以及执行频率,能满足日常需要。Timer是线程安全的,因为背后是单线程在执行所有任务。Timer是基于绝对时间调度的,而不是基于相对时间,所以它对系统时间的改变非常敏感。
1.1 使用:
1 | import java.util.Date;<br> import java.util.Timer;<br> import java.util.TimerTask;<br> /**<br> * 测试定时任务<br> */ <br> public class Test {<br> public static void main(String[] args) {<br> // 定义一个任务<br> TimerTask timerTask = new TimerTask() {<br> @Override<br> public void run() {<br> System.out.println("Run timerTask:" + new Date());<br> }<br> };<br> // 计时器<br> Timer timer = new Timer();<br> // 添加执行任务(延迟 1s 执行,每 2s 执行一次)<br> timer.schedule(timerTask, 1000, 2000);<br> }<br>} |
几个重要的方法:
schedule():开始调度任务,提供了几个包装方法;
cancle():终止任务调度,取消当前调度的所有任务,正在运行的任务不受影响;
purge():从任务队列中移除所有已取消的任务;
另外,java.util.TimerTask就是实现了 Runnable接口,具体任务逻辑则是在 run()方法里去实现。
1 | public abstract class TimerTask implements Runnable {<br> // ......<br>} |
执行结果如下:
1 | Run timerTask:Wed Mar 17 10 : 42 : 05 CST 2021 <br>Run timerTask:Wed Mar 17 10 : 42 : 07 CST 2021 <br>Run timerTask:Wed Mar 17 10 : 42 : 09 CST 2021 <br>Run timerTask:Wed Mar 17 10 : 42 : 11 CST 2021 <br>Run timerTask:Wed Mar 17 10 : 42 : 13 CST 2021 <br>Run timerTask:Wed Mar 17 10 : 42 : 15 CST 2021 <br>Run timerTask:Wed Mar 17 10 : 42 : 17 CST 2021 <br>Run timerTask:Wed Mar 17 10 : 42 : 19 CST 2021 <br>Run timerTask:Wed Mar 17 10 : 42 : 21 CST 2021 <br>...... |
1.2 Timer 缺点分析:
问题 1:任务执行时间长影响其他任务。
开启两个线程,如下:
1 | <br> import java.util.Date;<br> import java.util.Timer;<br> import java.util.TimerTask;<br> import java.util.concurrent.TimeUnit;<br> /**<br> * 测试定时任务<br> */ <br> public class Test {<br> public static void main(String[] args) {<br> // 定义任务 1<br> TimerTask timerTask1 = new TimerTask() {<br> @Override<br> public void run() {<br> try {<br> TimeUnit.SECONDS.sleep(3);// 休眠 3 秒<br> } catch (InterruptedException e) {<br> e.printStackTrace();<br> }<br> System.out.println("Run timerTask 1:" + new Date());<br> }<br> };<br> // 定义任务 2<br> TimerTask timerTask2 = new TimerTask() {<br> @Override<br> public void run() {<br> System.out.println("Run timerTask 2:" + new Date());<br> }<br> };<br> // 计时器<br> Timer timer = new Timer();<br> // 添加执行任务(延迟 1s 执行,每 3s 执行一次)<br> timer.schedule(timerTask1, 1000, 3000);<br> timer.schedule(timerTask2, 1000, 3000);<br> }<br>} |
以上就是直播系统开发,每日任务定时刷新实现的相关代码, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现