美文网首页
Java定时任务工具详解之Timer篇

Java定时任务工具详解之Timer篇

作者: 哦00 | 来源:发表于2018-12-16 11:12 被阅读0次

    Java定时任务调度工具详解

    什么是定时任务调度?

    ◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务。

    在Java中的定时调度工具?

    ◆ Timer       ◆Quartz

    Timer和Quarzt的区别?

    ◆ 出身不同(Timer由JDK直接提供,调用方式简单粗暴,不需要别的jar支持)

    ◆ 能力区别(TImer简单的定时任务,如需要每个星期天的8点,则需要Quarzt)

    ◆ 底层机制

    Timer简介

    Timer的定义:

    有且仅有一个后台线程对多个业务线程进行定时定频率的调度。

    主要构件:

    第二部分 Timer实战演练

    通过程序来讲解Timer

    1package cn.springbook.timer; 2 3import java.util.TimerTask; 4 5publicclassMyTimerTaskextends TimerTask { 6 7private String name; 8 9// 构造方法10public MyTimerTask(String name) {11this.name = name;12    }1314publicvoid run() {15// 打印当前name的值16System.out.println("Current exec name is:" +this.name);17    }1819}

    1package cn.springbook.timer; 2 3import java.util.Timer; 4 5publicclass MyTimer { 6publicstaticvoid main(String[] args) { 7// 1、创建一个timer实例 8Timer timer =new Timer(); 9// 2、创建一个MyTimerTask实例10MyTimerTask myTimerTask =newMyTimerTask("No.1");11// 3、通过timer定时定频率调用myTimerTask的业务逻辑12// 即第一次执行是在当前时间的两秒之后,之后每隔一秒钟执行一次13timer.schedule(myTimerTask, 2000L, 1000L);14    }15}

    Timer的定时调度函数

    schedule的四种用法

    scheduleAtFixedRate的两种用法

    schedule的四种用法:

    schedule(task, time)

    参数

    task -  所要安排的任务

    time - 执行任务的时间

    作用:在时间等于或超过time的时候执行且仅执行一次task

    1package cn.springbook.timer; 2 3import java.text.DateFormat; 4import java.text.SimpleDateFormat; 5import java.util.Calendar; 6import java.util.TimerTask; 7 8publicclassMyTimerTaskextends TimerTask { 910private String name;1112// 构造方法13public MyTimerTask(String name) {14this.name = name;15    }1617publicvoid run() {1819Calendar calendar = Calendar.getInstance();20DateFormat format =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");21System.out.println("Current exec time is:" + format.format(calendar.getTime()));22// 打印当前name的值23System.out.println("Current exec name is:" +this.name);24    }2526public String getName() {27return name;28    }2930publicvoid setName(String name) {31this.name = name;32    }33343536}

    1package cn.springbook.timer; 2 3import java.text.DateFormat; 4import java.text.SimpleDateFormat; 5import java.util.Calendar; 6import java.util.Timer; 7 8publicclass MyTimer { 9publicstaticvoid main(String[] args) {10// 1、创建一个timer实例11Timer timer =new Timer();12// 2、创建一个MyTimerTask实例13MyTimerTask myTimerTask =newMyTimerTask("No.1");1415Calendar calendar = Calendar.getInstance();16DateFormat format =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");17System.out.println("Current exec time is:" + format.format(calendar.getTime()));18calendar.add(Calendar.SECOND, 3);19/**20        * 在时间等于或超过time的时候执行且执行一次task21        * 如在2016-11-11 00:00:00执行一次task,打印任务名字22*/23myTimerTask.setName("schedule1");24        timer.schedule(myTimerTask, calendar.getTime());25    }26}

    schedule(task, time, period)

    参数

    task - 所要安排的任务

    time - 首次执行任务的时间

    period - 执行一次task的时间间隔,单位是毫秒

    1/**2 * 在时间等于或超过time的时候执行且执行一次task3 * 如在2016-11-11 00:00:00执行一次task,打印任务名字4 * 之后每隔两秒执行一次task5*/6myTimerTask.setName("schedule2");7timer.schedule(myTimerTask, calendar.getTime(), 2000);

    schedule(task, delay)

    参数

    task - 所要安排的任务

    delay - 执行任务前的延时时间,单位是毫秒

    作用:等待delay毫秒后执行且仅执行一次task

    1/**2 * 等待delay毫秒后执行且仅执行一次task3 * 如现在是2016-11-11 00:00:004 * 则在2016-11-11 00:00:01执行一次task,打印任务名字5 * 之后每隔1秒执行一次task6*/7myTimerTask.setName("schedule3");8timer.schedule(myTimerTask, 1000);

    schedule(task, delay, period)

    参数

    task  - 所要安排的任务

    delay - 执行任务前的延迟时间,单位毫秒

    period - 执行一次task的时间间隔,单位是毫秒

    作用:

      等待delay毫秒后首次执行task

      之后每隔period毫秒重复执行一次task

    1/**2 * 等待delay毫秒后执行且仅执行一次task3 * 如现在是2016-11-11 00:00:004 * 则在2016-11-11 00:00:01执行一次task,打印任务名字5 * 之后每隔2秒执行一次task6*/7myTimerTask.setName("schedule4");8timer.schedule(myTimerTask, 3000, 1000);

    scheduleAtFixedRate的两种用法

    scheduleAtFixedRate(task, time, period)

    参数

    task - 所要安排的任务

    time - 首次执行任务的时间

    period - 执行一次task的时间间隔,单位是毫秒

    作用: 

      时间等于或超过time时首次执行task

      之后每隔period毫秒重复执行一次task

    1/**2 * 在时间等于或超过time的时候首次执行一次task3 * 之后每隔period毫秒重复执行异一次task4 * 如在2016-11-11 00:00:00执行一次task,打印任务名字5 * 之后每隔两秒执行一次task6*/7myTimerTask.setName("scheduleAtFixedRate1");8timer.scheduleAtFixedRate(myTimerTask, calendar.getTime(), 2000);

    scheduleAtFixedRate(task, delay, period)

    参数

    task  - 所要安排的任务

    delay - 执行任务前的延迟时间,单位毫秒

    period - 执行一次task的时间间隔,单位是毫秒

    作用: 

      等待delay毫秒后首次执行task

      之后每隔period毫秒重复执行一次task

    1/**2 * 等待delay毫秒后执行且仅执行一次task3 * 之后每隔period毫秒重复执行异一次task4 * 如在2016-11-11 00:00:00执行一次task,打印任务名字5 * 之后每隔两秒执行一次task6*/7myTimerTask.setName("scheduleAtFixedRate2");

    8timer.scheduleAtFixedRate(myTimerTask, 1000, 2000);

    欢迎工作一到五年的Java工程师朋友们加入Java群: 891219277

    群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

    相关文章

      网友评论

          本文标题:Java定时任务工具详解之Timer篇

          本文链接:https://www.haomeiwen.com/subject/ybbtkqtx.html