java定时器_拾遗Timer定时器

cc0471ffe17830b20077ef4db0513e72.png

一 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 线程终止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逻辑门电路的知识点归纳

1.半导体二极管与MOS管的开关特性 二极管:正向导通,反向截止,但是要注意的是从反向截止到正向导通的时间极其短,但是从正向导通到反向截止要经过反向恢复(电荷存储效应)的过程,这个过程实际上就…

全国计算机等级考试题库二级C操作题100套(第78套)

第78套: 给定程序中,函数fun的功能是:将NN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若N3,有下列矩阵: 1 2 3 4 5 6 7 8 9 交换后为: 3 2 1 4 5 6 9 8 7 请在程序的下划线处…

善心

2019独角兽企业重金招聘Python工程师标准>>> 一个穷苦学生郝武德.凯礼,为了付学费,挨家挨户地推销货品。 到了晚上,发现自己的肚子很饿,而口袋里只剩下一个小钱。他在大街上犹豫徘徊了半天,终于鼓起勇气&a…

linux权限sudo和su,Linux su和sudo命令的区别,并获得root权限

su(superuser)su表示切换用户,如: 输入:su命令后回车表示切换当前的用户到root用户,或者: 输入:su - root(或者其他用户名)这里加了"-"后表示也切换的当前的环境变量到新用户的环境变量。su root…

python 清屏_Python学前准备如果你知道要去哪,那么全世界都给你让路

一、Python 已来 AI 不远在当今,人工智能已经渗透到了智能手机、网络搜索,广告分发,人脸识别,语音识别,自动驾驶,智能医疗,无人银行等日常生活领域。人工智能的生活化是不可避免的,它…

软件测试 决策表

决策表技术使用的一下特征的应用 If then else 逻辑关系 输入变量之间存在逻辑关系 计算过程中涉及对输入变量子集的处理 输入与输出之间存在因果关系 圈复杂度较高 决策表规模的增长方式不高(有N个条件的有限项决策表有2^N条规则),有几种方法…

js判断用户是否离开当前页面

简介 VisibilityChange 事件;用于判断用户是否离开当前页面 Code // 页面的 visibility 属性可能返回三种状态 // prerender,visible 和 hidden let pageVisibility document.visibilityState; // 监听 visibility change 事件 document.addEventLi…

全国计算机等级考试题库二级C操作题100套(第79套)

第79套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回&#xff0c;并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串&#xff0c;且串长<N。 请在程序的下划线处填入正确的内容并把…

linux 交叉编译 静态库,在ARM交叉编译时,如何选择要链接的静态库?

小编典典您有两种选择&#xff0c;获取正确的编译器。编写自己的“ C”库。获取正确的编译器。你是 总是 最安全的有一个编译器匹配您的系统。这适用于x86Linux和各种发行版。如果不同的编译器可以工作&#xff0c;您将很幸运。当您交叉编译时&#xff0c;这样做会更加困难&…

python输出可执行文件_重定向-禁止在Python调用中输出可执行文件

重定向-禁止在Python调用中输出可执行文件我有一个名为B的二进制文件&#xff0c;该文件在调用时会生成输出。 如果从Bash shell调用它&#xff0c;则大多数输出将受到A > /dev/null的抑制。所有输出将受到A &> /dev/null的抑制我有一个名为B的Python脚本&#xff0c…

全国计算机等级考试题库二级C操作题100套(第80套)

第80套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;将形参n中&#xff0c;各位上为偶数的数取出&#xff0c;并按原来从高位到低位的顺序组成一个新的数&#xff0c;并作为函数值返回。 例如&#xff0c;从主函数输入一个整数&#xff1a;27638496&#x…

记一次B站答题经历

第一题部分&#xff1a;社区规范卷 --------- ------------ 第二题&#xff1a;社区规范第二部分 -------------------- 第三部分自由选择题 ---------------------- -------------------------------- 最后答题成绩得分 -------------- ------------- 答完题后的感受&#xff…

linux 安装程序丢失链接动态库,Linux安装软件过程中提示缺少动态链接库.so的解决方法...

Linux在安装软件的时候有时会出现错误&#xff0c;提示缺少动态链接库.so&#xff0c;该问题是由什么原因导致的呢?情况分析&#xff1a;1.缺少动态连接库.so-cannot open shared object file:No such file or directory2.缺少动态连接库.so.0-cannot open shared object file…

全国计算机等级考试题库二级C操作题100套(第81套)

第81套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;在形参s所指字符串中的每个数字字符之后插入一个号。例如&#xff0c;形参s所指的字符串为&#xff1a;def35adh3kjsdf7。执行结果为&#xff1a;def35adh3kjsdf7*。 请在程序的下划线处填入正确的内容并…

菜鸟python爬虫_Python爬虫学习-基础爬取

编译环境&#xff1a;python v3.5.0, mac osx 10.11.4第三方库&#xff1a;针对网页解析&#xff0c;python有丰富的第三方库如:BeautifulSoup, urllib, requests etc.可以通过import来引入指定第三方库&#xff0c;通过from lib import function导入第三方库中的指定函数。如&…

点云赋值 PointCloudT::Ptr 运行时崩溃

PointCloudT::Ptr cloud; cloud.reset(new PointCloudT); cloud->points.resize(500);for(int index 0;index <500;index){  cloud->point[index].x 1.0; cloud->point[index].y 1.0;}采用以上方式赋值程序崩溃。Point t; for(int index 0;index <500;ind…

yaf(5) smarty

2013年4月6日 13:41:37 参考: http://www.oschina.net/question/812776_71817 http://yaf.laruence.com/manual/yaf.class.dispatcher.setView.html 这两者都是在bootstrap.php中写_initSmarty()函数来重新实现yaf的视图接口 这中方案默认的是存放模版文件的上级文件夹名字必须…

全国计算机等级考试题库二级C操作题100套(第82套)

第82套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;找出100&#xff5e;999之间&#xff08;含100和999&#xff09;所有整数中各位上数字之和为x&#xff08;x为一正整数&#xff09;的整数,然后输出&#xff1b;符合条件的整数个数作为函数值返回。 例如…

linux最小安装桌面,Linux工作环境:CentOS7最小安装+Xfce桌面环境

ref: https://blog.csdn.net/smstong/article/details/448029893.1 执行CentOS7 最小安装去官网下载CentOS-7.0-1406-x86_64-Minimal.iso&#xff0c;然后刻录光盘&#xff0c;安装之。安装完成后执行yum update更新系统。然后&#xff0c;执行# yum install epel-release安装额…

python自动获取cookie_selenium3+python自动化12-cookie相关操作(获取和删除)

前言在进行接口测试或者自动化测试时&#xff0c;有时就要登录好多次&#xff0c;特别麻烦&#xff0c;那能不能不要一遍一遍输入账号&#xff0c;直接跳过登录页面进行操作。这个时候就要用到cookie&#xff0c;这次主要整理cookie的一些操作&#xff0c;包含获取cookie、删除…