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

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等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容