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实现定时任务调度。

相关文章

  • Swing图形界面实现可动态刷新的验证码

    Swing图形界面实现可动态刷新的验证码

    这篇文章主要为大家详细介绍了Swing图形界面实现可动态刷新的验证码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • springBoot server.port=-1的含义说明

    springBoot server.port=-1的含义说明

    这篇文章主要介绍了springBoot server.port=-1的含义说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java内部类和异常类的概念以及使用

    Java内部类和异常类的概念以及使用

    这篇文章主要介绍了Java内部类和异常类的概念以及使用,文中有非常详细的代码以及注释,适合正在学习java基础的同学们使用,需要的朋友可以参考下
    2021-04-04
  • 详解JDK中ExecutorService与Callable和Future对线程的支持

    详解JDK中ExecutorService与Callable和Future对线程的支持

    这篇文章主要介绍了详解JDK中ExecutorService与Callable和Future对线程的支持的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • SpringBoot实现文件压缩处理详解

    SpringBoot实现文件压缩处理详解

    在工作我们经常会出现有多个文件,为了节省资源会将多个文件放在一起进行压缩处理,本文将使用SpringBoot实现文件压缩处理,感兴趣的可以了解下
    2024-11-11
  • Java发起http请求的完整步骤记录

    Java发起http请求的完整步骤记录

    这篇文章主要给大家介绍了关于Java发起http请求的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Java中高效的对象映射库Orika的用法详解

    Java中高效的对象映射库Orika的用法详解

    Orika是一个高效的Java对象映射库,专门用于在Java应用程序中简化对象之间的转换,下面就跟随小编一起来深入了解下Orika的具体使用吧
    2024-11-11
  • Java获取当前时间并转化为yyyy-MM-dd HH:mm:ss格式的多种方式

    Java获取当前时间并转化为yyyy-MM-dd HH:mm:ss格式的多种方式

    这篇文章主要介绍了Java获取当前时间并转化为yyyy-MM-dd HH:mm:ss格式的多种方式,每种方式结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • 聊聊Java BigInteger里面的mod和remainder的区别

    聊聊Java BigInteger里面的mod和remainder的区别

    这篇文章主要介绍了聊聊Java BigInteger里面的mod和remainder的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java并发包线程池ThreadPoolExecutor的实现

    Java并发包线程池ThreadPoolExecutor的实现

    本文主要介绍了Java并发包线程池ThreadPoolExecutor的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论