JAVA 定时器]四种常见定时器的原理和简单实现,带图易懂
最编程
2024-07-10 07:41:14
...
前言
定时器顾名思义,即定时触发某个事件,分离开来,即包含三个因素:定时,触发,某个事件,本文也将以此为基础介绍五种常见的定时器
本文只做基于SpringBoot的示例,其余版本的请自行查阅资料,大同小异
1.介绍
1.1.目的
定时器的目的即为了在某个时间点,程序自身主动触发某个事件,而不需要外力去开启或者启动,以节省人力并统一管理
1.2.示例场景
- 管理系统,需要每日12点将前一天的数据进行备份,并生成历史数据统计
- 宿管系统,每日10点将所有未归人员统计出来,主动交由管理人员
- 硬件设备,需要每隔2分钟检查设备是否连接正常,设备异常需要更新状态到管理端,必要时通知有关人员
- 图书馆借书管理系统,每天12点需要检查即将超时和已超时归还的书籍,并通过短信或其他途径通知有关人员
- 手机下载管理系统,开启下载后每隔0.5s刷新一次下载进度,在下载完成或者长时间卡顿时告知用户
- 订单管理系统,用户下达订单后开需要在半小时内付款,成功付款则生成订单结果,超时未付款则自动取消订单
上一篇: Java 定时器 定时器原理说明
下一篇: 前端图表库G2快速上手
推荐阅读
-
JAVA 定时器]四种常见定时器的原理和简单实现
-
java 定时器 定时器的使用方法和原理分析[简单易懂]
-
JAVA 定时器]四种常见定时器的原理和简单实现
-
Java 使用定时任务 - 前言:Java 开发过程中经常会遇到使用定时任务的情况,如在某个活动结束时自动生成获奖者名单、导出 excel 等。常见的有以下四种方式:Timer、ScheduledExecutorService、SpringTask、Quartz。 实现 Java 定时任务的四种方法 (1) JDK 自带定时器实现 (2) Spring Task @Scheduled 注解任务调度 (3) Quartz 定时器实现 (4) Elastic-job 分布式任务调度框架 JDK 自带 .NET Framework 2.0JDK 自带 Timer 和 JDK1.5 + 新 ScheduledExecutorService; Spring3.0自带的任务调度工具:它可以看做是一个轻量级的Quartz,而且使用起来比Quartz简单得多,一般可以直接用@Scheduled+corn表达式来注解实现; Quartz:简单但功能强大的 JAVA 作业调度框架; Elastic-job分布式作业调度框架:是当当网架构师基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的缺点。 JDK自带的java.util. JDK 自带的 java.util.Import 是 JDK 的一部分。 java.util.import import java.util. import java.util. public class Test { /** * 第一个方法:设置在指定时间执行指定任务,只执行一次 * schedule(TimerTask task, Date time) */ public static void timer1 { Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { System.out.println(new Date + "\t "+"--specify the task to be run---"); } }, new Date(System.currentTimeMillis + 2000)); } } } /** * 第二个方法:设置指定任务在延迟后执行,只执行一次 * schedule(TimerTask task, long delay) * 延迟单位毫秒 */ public static void timer2{ Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { system.out.println(new Date + "\t "+"--specify the task to be run---"); } }, 2000); } /** * 第三个方法:设置指定的任务在指定的延迟时间后周期性执行,周期时间为 period * schedule(TimerTask task, long delay, long period) * scheduleAtFixedRate(TimerTask task, long delay, long period) * 延迟,周期以毫秒为单位 */ public static void timer3 { Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { system.out.println(new Date + "\t "+"--specify the task to be run---"); } }, 1000, 1000); } /** * 第四种方法:设置指定任务 task 在指定时间 firstTime 开始重复循环执行,循环时间为周期 * schedule(TimerTask task, Date firstTime, long period) * scheduleAtFixedRate(TimerTask task, Date firstTime, long period) * 以毫秒为单位的周期 */ public static void timer4 { Calendar calendar = Calendar.getInstance; calendar.set(Calendar.HOTIME) */ calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时间 calendar.set(Calendar.MINUTE, 0); // 控制分钟数 calendar.set(Calendar.SECOND, 0); // 控制秒数 Date time = calendar.getTime; // 推导出执行任务的时间,本例中为今天 12:00:00。 Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { System.out.println(new Date +"\t "+"--- 指定要执行的任务 ---"); } }, time, 1000); } /** * schedule 方法和 scheduleAtFixedRate 方法的区别: * (1) schedule 方法:如果第一次执行时间延迟,则根据上次实际执行完成时间点计算后续执行时间,即:下一次执行时间点 = 上次程序执行完成时间点 + 间隔时间 * (2) scheduleAtFixedRate 方法:如果第一次执行时间延迟,则根据上次开始时间点计算后续执行时间,即:下次执行时间点=上次程序执行时间点+间隔时间,*且前一个任务的执行时间延迟,则根据上次实际执行完成时间点计算后续执行时间,即:下次执行时间点=上次程序执行完成时间点+间隔时间。 *而上一个任务的执行时间大于间隔时间,就会与当前任务重叠,TimerTask 在执行时需要考虑线程同步的问题 */ } 计时器的缺陷:
-
JAVA 定时器]四种常见定时器的原理和简单实现,带图易懂
-
JAVA 定时器]四种常见定时器的原理和简单实现,带图易懂