一 Timer 介绍

在开发中我们经常会遇到一些简单定时任务的需求,而不需要量级较重的定时任务就可以采取java定时器;

java.util.Timer工具类中的Timer 是定时器,但定时任务写在java.util.TimerTask 中,由 Timer 执行 TimerTask ;

Timer 的本质就是线程,构造方法如下

public 

从源码角度可知,如果这样创建定时器非守护线程,即使主线程运行结束,定时任务还是会执行;如果我们会使用如下的构造方式创建定时任务就是守护线程方式,会随着主线程的消亡而消亡;

public 

Timer内部维护了一个优先队列,用于顺序执行TimerTask任务;

private 

优先队列的实现就是数组方式作为平衡二叉堆

private 

TimerTask 实现了Runnable 接口,执行的任务动作就是run方法;

public 

所以定时器的本质就是启动了一个新的线程执行任务,这些任务都会维护在优先队列里面

timer的调度主要方法如下

  • schedule(TimerTask task, long delay) 延迟 delay 毫秒执行一次
  • schedule(TimerTask task, Date time) 指定时间执行一次
  • schedule(TimerTask task, long delay, long period) 延迟delay毫秒以后,每隔period毫秒执行一次
  • schedule(TimerTask task, Date firstTime, long period) 从firstTime时刻开始,每隔period毫秒执行一次

二 Timer使用示例

如果方式简单使用Timer去延迟执行线程任务,当然其它四种方法同理,调用方式区别不大;

public 

输出的间隔大约就是5秒

程序执行时间 18:47:28.258
线程执行了18:47:33.259

三 cancel 方法

TimerTask的cancel () 方法是将自身任务从任务队列中移除

我们先延迟2秒,再每2秒执行一次看效果

public 

结果是每2秒会执行一次

程序执行时间18:59:23.557
线程执行了18:59:25.558
线程执行了18:59:27.558
线程执行了18:59:29.559

启用cancel方法,后 就只会执行一次

public 

输出如下

程序执行时间19:02:12.770
线程执行了19:02:14.772

Timer的cancel方法是移除所有的任务;

public 

输出直接报错

程序执行时间:19:34.294
Exception in thread "main" java.lang.IllegalStateException: Timer already cancelled.at java.util.Timer.sched(Timer.java:397)at java.util.Timer.schedule(Timer.java:248)at com.youku1327.base.timer.TimerAbsolute.main(TimerAbsolute.java:28)

四 scheduleAtFixedRate

schedule 与 scheduleAtFixedRate 方法的区别如下:

schedule 方法如果执行任务的时间没有被延迟,下一次执行任务时间参考的是上一次任务执行的开始时间

scheduleAtFixedRate 方法如果执行任务的时间没有被延迟,下一次执行任务时间参考的是上一次任务执行的结束时间

五 Timer缺点

  • Timer 对调度的支持是基于绝对时间的,而不是相对时间,所以它对系统时间的改变非常敏感。
  • Timer 线程是不会捕获异常的,如果 TimerTask 抛出的了未检查异常则会导致 Timer 线程终止。

java定时器_拾遗Timer定时器相关推荐

  1. timer定时器_拾遗Timer定时器

    一 Timer  介绍 在开发中我们经常会遇到一些简单定时任务的需求,而不需要量级较重的定时任务就可以采取java定时器: java.util.Timer工具类中的Timer 是定时器,但定时任务写在 ...

  2. Java怎么使用spring定时器_浅析spring定时器的使用

    原生的Java定时器 使用Java.util包下的定时器也很简单,具体代码如下: //设置定时器开始时间 Date time = sdf.parse("2020-10-01 16:40:00 ...

  3. c++ 定时器_【话说定时器系列】之十:PWM输入模式测量脉宽及占空比实验

    STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍.去年,电堂推出了<STM32 TIMER基础及常规应用介绍>,为大家梳理了 STM32 TIMER 的庞大内容, ...

  4. python 定时器_按键精灵定时器介绍和使用,不会的小伙伴速速看看精辟

    金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚 ...

  5. stm32 定时器_如何计算STM32定时器、独立看门狗和窗口看门狗

    点击上方蓝色字体,关注我们 本博文简要阐述STM32L011微控制器定时器的参数配置(其他型号大同小异,本文侧重讲解配置,至于各类定时器的特点后续再述),STM32定时器种类繁多有通用定时器.基本定时 ...

  6. java项目中多个定时器_在java项目中如何使用Timer定时器

    在java项目中如何使用Timer定时器 发布时间:2020-11-16 16:36:16 来源:亿速云 阅读:97 作者:Leah 在java项目中如何使用Timer定时器?很多新手对此不是很清楚, ...

  7. java Timer定时器管理类

    1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...

  8. java quartz timer_Java定时器Quartz和Timer

    Java定时器之Quartz 简介 官方说明 Quartz is a richly featured, open source job scheduling library that can be i ...

  9. java timer线程结束_Java线程Timer定时器用法详细总结

    定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联. Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类.T ...

最新文章

  1. python搭建numpy_python开发环境搭建及numpy基本属性-【老鱼学numpy】
  2. notepad++是什么?用notepad++来编辑c语言代码
  3. 逆向project实战--Acid burn
  4. 二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现
  5. freemarker小例子
  6. 上海交大研究生计算机考研真题,2011年上海交通大学计算机研究生机试真题
  7. 达梦数据库代码导出_达梦数据库常见问题-命令行工具-导入导出工具
  8. PYPL 7 月榜单公布:Java 份额出现下降趋势
  9. matlab弗洛伊德算法,MATLAB弗洛伊德算法结果有疑惑,求大神解答
  10. 处理中文乱码以及登陆验证的过滤器Filter(建议收藏)
  11. 【现代机器人学】名词概念的理解
  12. pythoncv2模块详细介绍_【Opencv】【Python】Python中opencv模块cv2一些函数用法及简介...
  13. 从青铜到王者,代码人生之路 | 凌云时刻
  14. redis HSCAN命令及jedis的hscan方法
  15. 速达数据库服务器密码修改,速达,管家婆SQL Server帐套密码PJ方法 -电脑资料
  16. 计算机科学与技术学科评估 第五轮,【学科评估】解读第五轮学科各学科评估变化(上)...
  17. vue设置video图片_vue video和vue-video-player实现视频铺满教程
  18. linux 是什么?
  19. 在Excel中使用SQL语句实现数据处理
  20. linux启动tomcat权限不足

热门文章

  1. 广告主产品推词中的NLP
  2. 配置SMB共享 、 配置NFS共享
  3. 闪回表操作语法+使用闪回删除
  4. 使用log4j日志-配置载入问题
  5. C# 之 HttpResponse 类
  6. BundleFusion代码框架讲解
  7. mkcramfs 命令学习
  8. halcon通过点拟合圆形,鼠标选点
  9. 灰度图的width和widthstep的区别
  10. 【pyqt5学习】——containers相关控件(tab widget、scroll area、stack widget、tool box、MDI area、dock widget)