Java通过Timer与TimerTask实现定时任务调度

article/2025/8/30 9:43:32

java通过Timer、TimerTask实现定时任务调度


文章目录

  • java通过Timer、TimerTask实现定时任务调度
  • 前言
  • 一、什么Timer类
  • 二、什么TimerTask类
  • 三、代码实现定时调度
    • 1.创建DuTask类
    • 2.创建测试TestDuTask类
  • 总结


前言

在实际的工作当中,经常要用到定时去操作一下任务,例如:数据的定时备份,用户的定时短信发送,定时刷新缓存等等。下面介绍实现的两个基础工具类Timer与TimerTask。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么Timer类

1、Timer类是一种线程设施,可以用来实现在某一个时间或某一段时间后安排某一个任务执行一次或定期重复执行。
2、该功能要与TimerTask类配合使用,TimerTask类是用来实现由Timer创建的一次或者重复执行的某一个任务。
3、每一个Timer对象对应一个线程,因此定时计数器所执行的任务应该迅速完成,否则可能会延迟后续任务的执行,而这写后续的任务就有可能堆在一起,等到任务执行完成之后才能快速连续执行。

Timer类常用的方法
在这里插入图片描述

方法描述
public Timer()创建一个计时器并启动该计时器
public void cancel()用来终止该计时器,并放弃所有己安排的任务,对当前正在执行的任务没有影响
public int purge()将所有己经取消的任务删除,一般用来释放内存空间
public void schedule(TimerTask task, Date time)安排一个任务在指定的时间执行,如果己经超过该时间,则立即执行
public void schedule(TimerTask task, Date firstTime, long period)安排一个任务在指定的时间执行,然后以固定的频率(单位:ms)重复执行
public void schedule(TimerTask task, long delay)安排一个任务在一段时间(单位:ms)后执行
public void schedule(TimerTask task, long delay, long period)安排一个任务在一段时间(单位:ms)后执行,然后以固定的频率 (单位:ms)重复执行
public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)安排一个任务在指定的时间执行,然后以近似固定的频率 (单位:ms) 重复执行
public void scheduleAtFixedRate(TimerTask task, long delay, long period)安排一个任务在一段时间(单位:ms)后普通执行,然后以近似固定的频率 (单位:毫秒)重复执行

备注:在这里需要说明的是:schedule()与scheduleAtrixedRare()方法的区别在于重复执行任务时对于时间间隔出现延迟的情况处理:
(1)、schedule()方法的执行时间间隔水远是固定的,如果之前出现了延迟的情况,之后也会继续按照设定好的时间间隔来执行。
(2)、scheduleAtrixedRare()方法可以根据出现的延时时间自动调整下一次间隔的执行时间。

二、什么TimerTask类

要想执行具体的定时任务,就要必须使用TimerTask类,TimerTask类是一个抽象类,使用的时候需要继承该类,并实现抽象房方法。
TimerTask类常用的方法,以及实现接口的顺序图
在这里插入图片描述

方法描述
public boolean cancel()用来终止该计时器,并放弃所有己安排的任务,对当前正在执行的任务没有影响
public abstract void run()该任务所要执行的具体操作,该方法为引入的接口 Runnable 中的方法,子类需要覆写此方法
public long scheduledExecutionTime()返回最近一次要执行该任务的时间(如果正在执行,则返回此任务的执行安排时间),一般在run()方法中调用,用来判断当前是否有足够的时问来执行完成该任务

三、代码实现定时调度

1.创建DuTask类

继承TimerTask类,实现调度的能力,用于执行业务逻辑

/*** @author   zhx* @date 2021-12-19*/
public class DuTask extends TimerTask {@Overridepublic void run() {SimpleDateFormat sDate=null;sDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");System.out.println("当前时间执行任务的时间为:"+sDate.format(new Date()));}
}

2.创建测试TestDuTask类

进行任务调度

/*** @author   zhx* @date 2021-12-19*/
public class TestDuTask {public static void main(String[] args) {Timer timer = new Timer();//创建Timer类对象DuTask task = new DuTask();//定时任务//设置定时任务执行:  1秒后开始,每3秒重复执行timer.schedule(task,1000,3000);}
}

验证效果截图
在这里插入图片描述
间隔3秒执行的


总结

当然这执行我们在实际开过程中实现任务调度的方法之一,后续我将讲解第二种方式JobDetail实现定时任务调度。


http://chatgpt.dhexx.cn/article/gQPdcypB.shtml

相关文章

Java的Timer和TimerTask怎么结束

java中自带的定时器有Timer和TimerTask,但是运行起来要结束任务用cancel方法可以结束该任务,此时Timer线程还在运行,程序并没有退出,那么怎么结束Timer呢? 示例代码如下 public class Test {public static void main…

TimerTask类和Timer类的cancel()方法详解

无论是TimerTask类还是Timer类,其cancel()方法都是为了清除任务队列中的任务。虽然都是清除任务队列中的任务,却有一些不同:TimerTask类中的cancel()方法侧重的是将自身从任务队列中清除,其他任务不受影响,而Timer类中…

java 定时器Timer和TimerTask的详解(执行和暂停)

目录 1:java.util.Timer定时器的常用方法如下: 2:参数含义: 3.暂停任务: 4.例子: 1:java.util.Timer定时器的常用方法如下: schedule(TimerTask task, long delay) // 延迟delay…

Java定时任务Timer、TimerTask与ScheduledThreadPoolExecutor详解

目录 一、Timer和TimerTask 1、快速入门 2、schedule与scheduleAtFixedRate使用方法 3、schedule与scheduleAtFixedRate区别 4、终止Timer线程 5、Timer线程的缺点 二、ScheduledThreadPoolExecutor 1、构造方法    2、调度方法 3、与Timer相比,优点 定…

TimerTask

详解java定时任务 在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现。下面LZ就其原理、实例以及Timer缺陷三个方面来解析java Timer定时器。 一、简介 在java中一个完整定时任务需要由Time…

Java Timer TimerTask示例

Java java.util.Timer是一个实用程序类,可用于调度将来某个时间执行的线程。Java Timer类可用于计划要一次运行的任务或定期运行的任务。 Java TimerTask java.util.TimerTask是一个实现Runnable接口的抽象类,我们需要扩展这个类来创建我们自己的Timer…

Timer+TimerTask实现数字时钟

成果展示 布局 布局主题背景颜色采用#000000(纯黑色),各TextView字体颜色采用#FFFFFF(纯白色)。 使用五个TextView,分别实现小时:分钟,秒钟,am,pm,周日,具体…

Timer + TimerTask 实现数字时钟

任务: 自己完成的: 遇到的问题: 1.Android Studio 中 calendar设置系统时区无效的问题 14:50它显示为06:50,时间显示错误,这是因为时区不同。 在8.0以后设置时区,有所改动&#xf…

java定时器-Timer和TimerTask详解

1、例子入手 package pers.growing.test;import java.util.Timer; import java.util.TimerTask;public class Main {/*** 延迟100ms后,间隔1s打印出:hello world** param args* throws InterruptedException*/public static void main(String[] args) t…

定时器Timer与TimerTask的使用

一:简介 在JDK类库中Timer主要负责计划任务的功能,也就是在指定时间执行某一任务,执行时候会在主线程之外起一个单独的线程执行指定的任务。该类主要是设置任务计划,但封装的类是TimerTask类。 TimerTask是一个实现了Runnable接口…

Java的定时器Timer和定时任务TimerTask应用以及原理简析

记录:272 场景:Java JDK自带的定时器Timer和定时任务TimerTask应用以及原理简析。在JDK工具包:java.util中可以找到源码,即java.util.Timer和java.util.TimerTask。TimerTask实现Runnable接口的run方法。Timer的属性TimerThread …

原码、补码、反码的转换

1.原码 (1)一个正数,他的原码就是它对应的二进制数字。 (2)一个负数,按照绝对值大小转换成的二进制数,然后最高位补1,就是负数的原码。 2.反码 (1)正数的反…

原码、补码、反码的关系

一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 3 &…

原码,反码,补码,阶码,移码

本文转载自本站大佬“不去上课”,原文链接https://blog.csdn.net/ruidianbaihuo/article/details/87875178 原码,反码,补码,阶码,移码是什么?有什么区别(讨论机器数的表示) 本文内容参考自王达老师的《深入理解计算机…

原码、反码、补码之间的转换和简单运算

一、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同 二、负整数的符号位固定为1,由原码变为补码时,规则如下: 1、原码符号位1不变,整数的每一位二进制数位求反,得到反码 2、反码…

原码,反码,补码的概念

计算机里都是以补码的形式存储数据,电脑只能识别二进制的0和1, 一个字节(8位)为例 原码 :最高位符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。 反码:正…

C语言——原码, 反码, 补码 详解

目录 一. 机器数和真值 1、机器数 2、真值 二. 原码, 反码, 补码的基础概念和计算方法. 1. 原码 2. 反码 3. 补码 三. 为何要使用原码, 反码和补码 四 原码, 反码, 补码 再深入 同余的概念 负数取模 开始证明 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先…

原码、反码、补码、移码的概念及转换

目录 前言 1.原码 2.反码 3.补码 4.移码 前言 学习完数的小数点表示,下一个需要解决的问题就是数的机器码表示问题。 在计算机中对数据进行运算操作时,符号位应该如何表示?是否也同数值位一道参加运算操作呢?如果参加&…

mt7620芯片处理器核心资料

MT7620产品系统整合了2T2R 802.11n Wi-Fi 收发器、580MHz MIPS 24KEc™ 中央处理器 (CPU)、5 端口高速以太网络端口物理层 (Ethernet PHY)、HNAT、存储器加速器、USB2.0 主机/设备,以及多种慢速输入输出 (U客论坛)。MT7620A 支持 PCIe、RGMII,适用于 AC7…

mt7620参考设计原理图,mt7620芯片资料,mt7620处理器资料

mt7620参考设计原理图,芯片资料,处理器资料 核心资料 芯片处理器资料 设计注意事项 处理器大全 音频语音设计资料文档(U客论坛) MT7620产品系统整合了2T2R 802.11n Wi-Fi 收发器、580MHz MIPS 24KEc™ 中央处理器 (CPU)、5 端口高速以太网络端口物理层 (Ethernet PHY)、HNAT…