位置: IT常识 - 正文

Java Timer(定时器)(java定时器怎么用)

编辑:rootadmin
Java Timer(定时器) 概述:Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以安排任务“执行一次”或者定期“执行多次”。 然而在实际的开发过程当中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。方法摘要:schedule(TimerTask task, Date time) // 安排在 "指定的时间" 执行 指定的任务。(只执行一次)schedule(TimerTask task,long delay) // 安排在指定延迟后执行指定的任务schedule(TimerTask task, Date firstTime , long period) // 安排指定的任务在 "指定的时间 " 开始进行 "重复" 的固定延迟执行schedule(TimerTask task,long delay,long period)// 安排指定的任务指定的延迟后开始进行重复的固定延迟执行.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)// 安排指定的任务在指定的时间开始进行重复的固定速率执行.scheduleAtFixedRate(TimerTask task,long delay,long period)//安排指定的任务在指定的延迟后开始进行重复的固定速率执行.Timer.cancal()// 终止此计时器,丢弃所有当前已安排的任务。Timer.purge()// 从此计时器的任务队列中移除所有已取消的任务。TimerTask.cancal()// 把当前任务取消

推荐整理分享Java Timer(定时器)(java定时器怎么用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java定时器怎么用,java 定时器schedule,java定时器时间格式,java定时器时间格式,java 定时器时间表达式,java定时器时间格式,java定时器的使用,java 定时器时间表达式,内容如对您有帮助,希望把文章链接给更多的朋友!

固定延迟:意味着执行将在最后一次执行开始后的一段时间内开始,即使它被延迟(因此它本身被延迟)。也就是说任务的 下一次执行时间 是相对于 上一次实际执行完成的时间点 ,因此执行时间会不断延后

固定频率:意味着每次执行都将遵守初始计划,无论之前的执行是否被延迟。也就是说任务的 下一次执行时间 是相对于 上一次开始执行的时间点 ,因此执行时间不会延后

关于这两种调度方式,让我们看看如何使用它们:

Java Timer(定时器)(java定时器怎么用)

为了使用固定延迟调度,schedule()方法还有两个重载,每个重载都使用一个额外的参数来表示以毫秒为单位的周期性。为什么两次重载?因为仍然有可能在某个时刻或某个延迟之后开始执行任务。

至于固定频率调度,我们有两个scheduleAtFixedRate()方法,它们的周期也是以毫秒为单位的。同样,我们有一种方法可以在给定的日期和时间启动任务,还有一种方法可以在给定的延迟后启动任务。

注意一点:如果一个任务的执行时间超过了执行周期,那么无论我们使用固定延迟还是固定速率,它都会延迟整个执行链。(固定速率会连续执行,固定延迟会等待延迟再执行)

具体代码schedule(TimerTask task, Date time)/** * @PROJECT_NAME: demo * @DESCRIPTION: 指定时间执行 */public class TimerDemo { public static void main(String[] args) { Calendar ca = Calendar.getInstance(); System.out.println(ca.getTime()); ca.set(Calendar.SECOND, ca.get(Calendar.SECOND) + 5); new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println(new Date(scheduledExecutionTime()); } }, ca.getTime()); }}schedule(TimerTask task,long delay)/** * @PROJECT_NAME: demo * @DESCRIPTION: 延迟指定时间后执行 */public class DelayDemo { public static void main(String[] args) { System.out.println(new Date()); new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println(new Date(scheduledExecutionTime()); } }, 2000); }}schedule(TimerTask task, Date firstTime, long period)/** * @PROJECT_NAME: demo * @DESCRIPTION: 安排指定的任务在 "指定的时间 " 开始进行 "重复" 的固定延迟执行 */public class FirstAndPeriodDemo { public static void main(String[] args) { Calendar ca = Calendar.getInstance(); System.out.println(ca.getTime()); ca.set(Calendar.SECOND, ca.get(Calendar.SECOND) + 2); new Timer().schedule(new TimerTask() { @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(new Date(scheduledExecutionTime())); } }, ca.getTime(),2000); }}

第一次任务延迟了2s,然后之后因为实现线程执行时间为3s,所以在任务结束时在开始下一次任务。

schedule(TimerTask task,long delay,long period)/** * @PROJECT_NAME: demo * @DESCRIPTION: 安排指定的任务在“指定的延迟”后开始进行“重复”的固定延迟执行 */public class DelayAndPeriodDemo { public static void main(String[] args) { System.out.println(new Date()); new Timer().schedule(new TimerTask() { @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(new Date(scheduledExecutionTime())); } }, 1000,2000); }}

scheduleAtFixedRate(TimerTask task,Date firstTime,long period)/** * @PROJECT_NAME: demo * @DESCRIPTION: */public class FixAndFirstDemo { public static void main(String[] args) { System.out.println(new Date()); new Timer().scheduleAtFixedRate(new TimerTask() { @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(new Date(scheduledExecutionTime())); } }, 1000, 2000); }}

按照固定速率执行。 但是,这儿引出了另外一个问题。既然 Timer 内部是单线程实现的,在执行间隔为2秒、任务实际执行为3秒的情况下, scheduleAtFixedRate 是如何做到2秒输出一次的呢?

【特别注意】

这儿其实是一个障眼法。需要重点关注的是,打印方法输出的值是通过调用 scheduledExecutionTime() 来生成的,而这个方法并不一定是任务真实执行的时间,而是当前任务应该执行的时间。 源码理解

本文链接地址:https://www.jiuchutong.com/zhishi/299447.html 转载请保留说明!

上一篇:前端搭建小人逃脱游戏(内附源码)

下一篇:微信小程序支付完整流程(前端)(微信小程序支付接口调用)

  • 小米12红外遥控器怎么用(小米12红外遥控怎么用)

    小米12红外遥控器怎么用(小米12红外遥控怎么用)

  • 小米悬浮窗小屏怎么开(小米悬浮窗小屏怎么调位置)

    小米悬浮窗小屏怎么开(小米悬浮窗小屏怎么调位置)

  • 苹果12mini用的屏幕是什么材质的(苹果12mini屏幕好吗)

    苹果12mini用的屏幕是什么材质的(苹果12mini屏幕好吗)

  • 抖音怎么一次性删除所有聊天记录(抖音怎么一次性隐藏所有作品)

    抖音怎么一次性删除所有聊天记录(抖音怎么一次性隐藏所有作品)

  • 笔记本风扇噪音大(笔记本风扇噪音大是什么原因是怎么处理)

    笔记本风扇噪音大(笔记本风扇噪音大是什么原因是怎么处理)

  • 手机qq不是好友怎么发信息(手机qq不是好友能发文件吗)

    手机qq不是好友怎么发信息(手机qq不是好友能发文件吗)

  • 华为手机照片水印可以自己设置吗(华为手机照片水印可以编辑文字吗)

    华为手机照片水印可以自己设置吗(华为手机照片水印可以编辑文字吗)

  • win10system占用cpu高(2020win10system占用cpu过高)

    win10system占用cpu高(2020win10system占用cpu过高)

  • 单向好友可以聊天吗(单向好友聊天记录会不会一直在)

    单向好友可以聊天吗(单向好友聊天记录会不会一直在)

  • 笔记本fn键不能用了怎么办(笔记本fn键没反应)

    笔记本fn键不能用了怎么办(笔记本fn键没反应)

  • 快手退款成功几天到账(快手退款成功几天能到账)

    快手退款成功几天到账(快手退款成功几天能到账)

  • iphone8无线充电功率(iPhone8无线充电速度)

    iphone8无线充电功率(iPhone8无线充电速度)

  • 苹果11pro死机怎么重启(iphone11pro卡死机)

    苹果11pro死机怎么重启(iphone11pro卡死机)

  • 魅族17开售时间(魅族17什么时候上市)

    魅族17开售时间(魅族17什么时候上市)

  • 时序逻辑电路有哪些结构特点?(时序逻辑电路有记忆吗)

    时序逻辑电路有哪些结构特点?(时序逻辑电路有记忆吗)

  • 怎样加强手机接收wifi(怎样加强手机接听功能)

    怎样加强手机接收wifi(怎样加强手机接听功能)

  • tencent文件夹能删吗(tencent文件夹)

    tencent文件夹能删吗(tencent文件夹)

  • word里怎么删除整页(word里怎么删除表格)

    word里怎么删除整页(word里怎么删除表格)

  • 苹果手机拉黑对方提示什么(苹果手机拉黑对方打电话能查到吗)

    苹果手机拉黑对方提示什么(苹果手机拉黑对方打电话能查到吗)

  • vivo手机怎么连拍照片(vivo手机怎么连接wifi)

    vivo手机怎么连拍照片(vivo手机怎么连接wifi)

  • 手机怎么恢复浏览器历史记录(手机怎么恢复浏览器下载记录)

    手机怎么恢复浏览器历史记录(手机怎么恢复浏览器下载记录)

  • airpods第一次要充多久(airpods第一次需要充电吗)

    airpods第一次要充多久(airpods第一次需要充电吗)

  • 小米官网预约怎么取消(小米商城的预约)

    小米官网预约怎么取消(小米商城的预约)

  • qq聊天名字旁边有个耳朵(qq聊天名字旁边的小人)

    qq聊天名字旁边有个耳朵(qq聊天名字旁边的小人)

  • 怎么清理airpods(怎么清理airpods里面的耳屎)

    怎么清理airpods(怎么清理airpods里面的耳屎)

  • php中sleep()函数是什么(phpsystem函数)

    php中sleep()函数是什么(phpsystem函数)

  • 视同销售的增值税如何计算
  • 电子承兑提示付款
  • 机票的抵扣进项怎么抵扣
  • 专用发票二维码压线
  • 预付冲应付会计分录摘要
  • 不达起征点收到销售额如何作分录?
  • 企业充值是什么意思
  • 单位聘请的临时工请假旅游
  • 税款不申报会怎样
  • 水利基金计提比例
  • 为员工买的商业险是否能税前扣除
  • 防伪税控技术维护费是进项还是销项
  • 劳务派遣差额部分可以开专票吗
  • 资本公积盈余公积区别
  • 火车票抵扣进项税额怎么申报
  • 税务机关未采集开票信息是什么意思
  • 收到上级补助收入怎么记账
  • 工程哪些材料可以做
  • 报关单和发票上的公司抬头不一致
  • 银行存款二级科目怎么增加
  • 货物劳务和应税收入区别
  • 国外消费发票可以抵扣吗
  • 药品入库和出库必须执行什么制度
  • win8.1电脑设置在哪里
  • 开机默认开启数字键
  • 销售折扣单独开票
  • win7电脑怎么样
  • qtaet2s.exe - qtaet2s是什么进程 有什么用
  • php抽奖算法程序怎么写
  • dev beta 发布预览
  • windows dvd maker是什么
  • giantantispywaremain.exe是什么进程 有什么作用 giantantispywaremain进程查询
  • Dardanup郡的小矮人村,澳大利亚 (© Amanda Hughes/Alamy)
  • js map foreach遍历
  • 收取的延期付款利息会计调账处理
  • 多目标pso
  • 黑色金属冶炼压延品的税收编码是多少
  • 专利代理服务费计入什么科目
  • 单图像三维重建
  • 基于javaweb的图书馆管理系统
  • Apsara Clouder云计算技能认证
  • 智能优化算法及其MATLAB实例
  • chattra
  • fping命令参数
  • 命令行怎么管理员运行
  • python怎么求列表里的和
  • wordpress jquery
  • 人力资源预算包括哪些内容
  • 用友t3财务报表导出
  • 汇票收入会计分录
  • 分享帝国cms选取什么
  • 关于材料采购的通知
  • 税是什么为什么要交税
  • 已抵扣的进项税额转出会计分录账务处理
  • 建筑设计行业收费标准
  • 如何填写社会保障卡信息
  • 成本不够如何计算出来
  • 一年以上的借款是长期借款吗
  • 暂估收不到发票,怎么处理
  • 360天认证期是什么时候发布的
  • 《关于工资总额组成的规定》第四条
  • 收不回来的其他应收款如何坏账处理
  • 废品损失的计算方法及废品损失的范围
  • XP系统安装不了QQ
  • u盘重装系统电脑
  • 电脑系统怎么设置字体大小
  • RAVMOND.exe - RAVMOND是什么进程.有什么作用
  • win8.1内存占用过高
  • sistray.exe - sistray是什么进程 有什么用
  • win7系统重启后黑屏不进系统
  • cocos2dx4.0教程
  • unity 3d数学
  • javascript中循环结构包括
  • python中布尔运算
  • nodejs爬虫技术
  • unity 摄像机
  • 安卓 触摸屏
  • 重庆地方税务局发票查询
  • 国家税务总局简易征收最新文件
  • 三种人不交个人所得税?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设