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

 更新时间:2024年12月23日 12:43:59   作者:灰太狼RD  
本文介绍了如何在Java中使用`Timer`和`TimerTask`类来实现定时任务调度,`Timer`类用于创建计时器并安排任务,而`TimerTask`类用于定义具体的任务,文章详细介绍了这两个类的方法和使用示例,包括创建任务、安排任务、取消任务等操作,通过一个简单的例子

前言

在实际的工作当中,经常要用到定时去操作一下任务,例如:数据的定时备份,用户的定时短信发送,定时刷新缓存等等。下面介绍实现的两个基础工具类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 {
    @Override
    public 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实现定时任务调度。

相关文章

  • Java描述数据结构学习之链表的增删改查详解

    Java描述数据结构学习之链表的增删改查详解

    这篇文章主要给大家介绍了关于Java描述数据结构学习之链表的增删改查的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • java 删除文件夹中的所有内容而不删除文件夹本身的实例

    java 删除文件夹中的所有内容而不删除文件夹本身的实例

    下面小编就为大家带来一篇java 删除文件夹中的所有内容而不删除文件夹本身的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • java使用正则表达为数字添加千位符的简单方法

    java使用正则表达为数字添加千位符的简单方法

    这篇文章主要介绍了java使用正则表达为数字添加千位符的简单方法,需要的朋友可以参考下
    2014-04-04
  • Java 如何接收kernel传过来的数组(推荐)

    Java 如何接收kernel传过来的数组(推荐)

    这篇文章主要介绍了Java 如何接收kernel传过来的数组,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-08-08
  • Java 深入浅出掌握Collection单列集合Set

    Java 深入浅出掌握Collection单列集合Set

    Collection集合类是单列集合类的根接口,用来存储一系列符合某种规则的元素。List接口和Set接口是Collection集合类的子接口,其中List接口的常用实现类有ArrayList类、Vector类和LinkedList类;Set接口的常用实现类有HashSet类和TreeSet类
    2021-11-11
  • IntelliJ IDEA查看方法说明文档的图解

    IntelliJ IDEA查看方法说明文档的图解

    今天小编就为大家分享一篇关于IntelliJ IDEA查看方法说明文档的图解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 浅谈Strut2如何对请求参数的封装

    浅谈Strut2如何对请求参数的封装

    这篇文章主要介绍了浅谈Strut2如何对请求参数的封装,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • 最常用的1000个Java类(附代码示例)

    最常用的1000个Java类(附代码示例)

    这篇文章主要介绍了最常用的1000个Java类(附代码示例),需要的朋友可以参考下
    2015-04-04
  • Java Session验证码案例代码实例解析

    Java Session验证码案例代码实例解析

    这篇文章主要介绍了Java Session验证码案例代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 详解maven中央仓库连不上的解决办法

    详解maven中央仓库连不上的解决办法

    这篇文章主要介绍了详解maven中央仓库连不上的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论