Java定时任务调度工具详解

什么是定时任务调度?

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

在Java中的定时调度工具?

◆ Timer ◆Quartz

Timer和Quarzt的区别?

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

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

◆ 底层机制

Timer简介

Timer的定义:

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

主要构件:

第二部分 Timer实战演练

通过程序来讲解Timer

复制代码 1 package cn.springbook.timer; 2 3 import java.util.TimerTask; 4 5 public class MyTimerTask extends TimerTask { 6 7 private String name; 8
9 // 构造方法 10 public MyTimerTask(String name) { 11 this.name = name; 12 } 13 14 public void run() { 15 // 打印当前name的值 16 System.out.println("Current exec name is:" + this.name); 17 } 18 19 } 复制代码 复制代码 1 package cn.springbook.timer; 2 3 import java.util.Timer; 4 5 public class MyTimer { 6 public static void main(String[] args) { 7 // 1、创建一个timer实例 8 Timer timer = new Timer(); 9 // 2、创建一个MyTimerTask实例 10 MyTimerTask myTimerTask = new MyTimerTask("No.1"); 11 // 3、通过timer定时定频率调用myTimerTask的业务逻辑 12 // 即第一次执行是在当前时间的两秒之后,之后每隔一秒钟执行一次 13 timer.schedule(myTimerTask, 2000L, 1000L); 14 } 15 } 复制代码

Timer的定时调度函数

schedule的四种用法

scheduleAtFixedRate的两种用法

schedule的四种用法:

schedule(task, time)

参数

task - 所要安排的任务

time - 执行任务的时间

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

复制代码 1 package cn.springbook.timer; 2 3 import java.text.DateFormat; 4 import java.text.SimpleDateFormat; 5 import java.util.Calendar; 6 import java.util.TimerTask; 7 8 public class MyTimerTask extends TimerTask { 9 10 private String name; 11
12 // 构造方法 13 public MyTimerTask(String name) { 14 this.name = name; 15 } 16 17 public void run() { 18
19 Calendar calendar = Calendar.getInstance(); 20 DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 21 System.out.println("Current exec time is:" + format.format(calendar.getTime())); 22 // 打印当前name的值 23 System.out.println("Current exec name is:" + this.name); 24 } 25 26 public String getName() { 27 return name; 28 } 29 30 public void setName(String name) { 31 this.name = name; 32 } 33
34
35 36 } 复制代码 复制代码 1 package cn.springbook.timer; 2 3 import java.text.DateFormat; 4 import java.text.SimpleDateFormat; 5 import java.util.Calendar; 6 import java.util.Timer; 7 8 public class MyTimer { 9 public static void main(String[] args) { 10 // 1、创建一个timer实例 11 Timer timer = new Timer(); 12 // 2、创建一个MyTimerTask实例 13 MyTimerTask myTimerTask = new MyTimerTask("No.1"); 14
15 Calendar calendar = Calendar.getInstance(); 16 DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 17 System.out.println("Current exec time is:" + format.format(calendar.getTime())); 18 calendar.add(Calendar.SECOND, 3); 19 /** 20 * 在时间等于或超过time的时候执行且执行一次task 21 * 如在2016-11-11 00:00:00执行一次task,打印任务名字 22 */ 23 myTimerTask.setName("schedule1"); 24 timer.schedule(myTimerTask, calendar.getTime()); 25 } 26 } 复制代码

schedule(task, time, period)

参数

task - 所要安排的任务

time - 首次执行任务的时间

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

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

schedule(task, delay)

参数

task - 所要安排的任务

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

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

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

schedule(task, delay, period)

参数

task - 所要安排的任务

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

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

作用:

  等待delay毫秒后首次执行task

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

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

scheduleAtFixedRate的两种用法

scheduleAtFixedRate(task, time, period)

参数

task - 所要安排的任务

time - 首次执行任务的时间

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

作用:

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

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

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

参数

task - 所要安排的任务

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

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

作用:

  等待delay毫秒后首次执行task

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

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

8 timer.scheduleAtFixedRate(myTimerTask, 1000, 2000); 欢迎工作一到五年的Java工程师朋友们加入Java群: 891219277 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

转载于:https://juejin.im/post/5c15c34c6fb9a049ee805a55

Java定时任务工具详解之Timer篇相关推荐

  1. Java定时任务调度工具详解之Timer篇

    Java定时任务调度工具详解之Timer篇 https://segmentfault.com/a/1190000009542398

  2. 【慕课笔记】Java定时任务调度工具详解之Timer篇_0理论

    慕课地址 1 简单介绍 1)什么是定时任务调度 2)Timer简介 打开jdk-zh说明文档查看即可 推荐看英文版本的 简单写个demo,感受一下timer的定时调度函数.schedule()(本人实 ...

  3. java定时任务工具详解之Quartz

    Quartz简介 特点: 强大的调度功能 灵活的应用方式 分布式和集群能力 主要用到的设计模式 Builder模式 Factory模式 组件模式 链式写法 三个核心概念 调度器 任务 触发器 第一个Q ...

  4. java 字节码详解_Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  5. Java中Thread详解(一篇就够了)

    前言 操作系统中,一个进程往往代表着一个应用程序实例,而线程是进程中轻量级的调度单元,也可以看作是轻量级的进程,可以共享进程资源.下面简单介绍在操作系统中线程通用实现方式.接下来内容主要对线程模型进行 ...

  6. Java NIO全面详解(看这篇就够了)

    很多技术框架都使用NIO技术,学习和掌握Java NIO技术对于高性能.高并发网络的应用是非常关键的 NIO简介 NIO 中的 N 可以理解为 Non-blocking,不单纯是 New,是解决高并发 ...

  7. [转帖]前端-chromeF12 谷歌开发者工具详解 Sources篇

    前端-chromeF12 谷歌开发者工具详解 Sources篇 原贴地址:https://blog.csdn.net/qq_39892932/article/details/82498748 cons ...

  8. 一篇搞定位运算——java位运算详解

    java位运算详解 前言 一.位运算符 &:按位与 |:按位或 ~:按位非 ^:按位异或 <<:左位移运算符 >>:右位移运算符 <<<:无符号右移运 ...

  9. jvm之java内存区域详解篇guide哥yyds

    jvm 一.java内存区域详解 1.运行时数据区域 线程私有的: 虚拟机栈 本地方法栈 程序计数器 线程共享的: 堆 方法区 直接内存(非程序运行时数据区的一部分) 1.1什么是程序计数器 程序计数 ...

最新文章

  1. 水晶报表printmode的ActiveX打印
  2. 第三课 查询指定id的单个对象
  3. 让你每天精神都好好的方法ZT
  4. bootstrap layui 两种分页的实现
  5. 学python有哪些用途-初入门学习python有哪些用途?
  6. android纯白背景加灰,Android背景颜色设置为灰色而不是@android:颜色/白色
  7. [RabbitMQ]RabbitMQ概念_四大核心概念
  8. 青蛙的约会 数论 拓展欧几里德
  9. C# Design Patterns (3) - Decorator
  10. 去除tableView表头悬浮
  11. unity中遍历Transform的子物体
  12. 少编码多思考:代码越多 问题越多
  13. CISP考试的全过程
  14. 汽车空调管路气密性检测
  15. Eclipse的MAT的支配树
  16. STM32HAL库-内部Flash在指定页读写保护示例
  17. 【TouchDesigner】用Replicator制作选择器
  18. 复合赋值运算符“+=、-=、*=、/=、%=”详解
  19. PAT甲级 A1030
  20. SAP BDC数据批量导入功能

热门文章

  1. Mybatis案例超详解
  2. ajax+MultipartFile上传文件到本地
  3. docker 命令2
  4. (转)Windows Form Application 读取并修改App.config文件
  5. 创建maven的web项目,并用jetty调试
  6. Generalised Dice Overlap as a Deep Learning Loss Function for Highly Unbalanced Segmentations
  7. (七)图像处理中常用算子Laplacian\Sobel\Roberts\Prewitt\Kirsch
  8. Proteus仿真错误解决方法:No power supply specified for net 5V in Power Rail Configuration.
  9. OSG仿真案例(0)
  10. java开发区块链_使用Java语言从零开始创建区块链