位置: 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 转载请保留说明!

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

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

  • 消息发出但被对方拒收了是被拉黑了吗(消息发出但被对方拒绝了是什么意思)

    消息发出但被对方拒收了是被拉黑了吗(消息发出但被对方拒绝了是什么意思)

  • 华为手机隐藏图标的设置方法(华为手机隐藏图片)

    华为手机隐藏图标的设置方法(华为手机隐藏图片)

  • 文档背景图片怎么设置(文档背景图片怎么设置合适的大小)

    文档背景图片怎么设置(文档背景图片怎么设置合适的大小)

  • 微信不能发大于100m的文件该怎么办(微信不能发大于1G的文件咋办)

    微信不能发大于100m的文件该怎么办(微信不能发大于1G的文件咋办)

  • 华为手机录像能录多久(华为手机录像能设定时间吗)

    华为手机录像能录多久(华为手机录像能设定时间吗)

  • 虎牙账号注销要多久(虎牙账号注销要验证码吗)

    虎牙账号注销要多久(虎牙账号注销要验证码吗)

  • 微信一直在清理进不去怎么办(微信一直在清理缓存)

    微信一直在清理进不去怎么办(微信一直在清理缓存)

  • iphone11pro max录屏怎么设置(iphone11pro max录屏在哪里)

    iphone11pro max录屏怎么设置(iphone11pro max录屏在哪里)

  • 抖音不想让一个人看到怎么设置(抖音不想让一个人看到我在线)

    抖音不想让一个人看到怎么设置(抖音不想让一个人看到我在线)

  • 华为nova5pro重量(华为nova5pro重量不一样)

    华为nova5pro重量(华为nova5pro重量不一样)

  • 淘宝退货红包会退吗(淘宝退货红包会以现金的形式退回吗)

    淘宝退货红包会退吗(淘宝退货红包会以现金的形式退回吗)

  • 小米8夜光屏怎么打开(小米8夜光屏用来干嘛)

    小米8夜光屏怎么打开(小米8夜光屏用来干嘛)

  • word文档如何限制复制(word文档如何限制上传云端)

    word文档如何限制复制(word文档如何限制上传云端)

  • 手机qq建群怎么建(手机qq建群怎么解散群聊)

    手机qq建群怎么建(手机qq建群怎么解散群聊)

  • 手机为什么打开软件会闪退(手机为什么打开微信才能接收到新消息)

    手机为什么打开软件会闪退(手机为什么打开微信才能接收到新消息)

  • 被删除的抖音怎么恢复(抖音被删掉了怎么找回)

    被删除的抖音怎么恢复(抖音被删掉了怎么找回)

  • vivox21支持nfc功能吗(vivox21a支持nfc)

    vivox21支持nfc功能吗(vivox21a支持nfc)

  • 小度蓝牙音箱怎样操作(小度蓝牙音箱怎么开机)

    小度蓝牙音箱怎样操作(小度蓝牙音箱怎么开机)

  • 华为手机怎么看型号(华为手机怎么看电池寿命)

    华为手机怎么看型号(华为手机怎么看电池寿命)

  • 小米6如何开启人脸识别(小米6如何开启usb)

    小米6如何开启人脸识别(小米6如何开启usb)

  • 图像处理——图像增强(图像处理入门)

    图像处理——图像增强(图像处理入门)

  • HTML小游戏11 —— 横版恐龙大冒险游戏(附完整源码)(html在线小游戏)

    HTML小游戏11 —— 横版恐龙大冒险游戏(附完整源码)(html在线小游戏)

  • 增值税发票能不能报销
  • 什么情况下进项税额需要转出
  • 佣金和手续费支出 纳税调整
  • 招聘只招一个人
  • 其他应付款计入资本公积
  • 住宿发票没有天数
  • 现金流量怎么影响股票价值
  • 发票上是17%的税率吗
  • 银行发放执行款多久到账
  • 银行利息的现金流量项目是什么
  • 在杂志上发表论文
  • 税收滞纳金和税金滞纳金有什么区别
  • 出口零税率是什么意思
  • 购买的技术服务费需要摊销吗
  • 税控服务系统
  • 实收资本选择什么子目
  • 工程收入怎么算
  • 建材销售公司需要交哪些税
  • 油类增值税是多少
  • 固定资产减值准备可以税前扣除吗
  • 抄报汇总对比通用怎么写
  • 公司聚餐计入福利费还是招待费
  • 短期借款利息的处理
  • 支付给外单位的押金是其他应收款吗
  • 农村合作社补贴政策
  • 没有权限使用网络资源,请与这台服务器的管理员联系
  • 农产品的进项税额转出公式
  • php -i
  • 工厂采购部门
  • msmpeng.exe 是什么
  • php加载mysql
  • 购买办公用品没收到发票怎么做账
  • 新闻管理系统类图
  • 横看成横看成岭侧成峰的下一句
  • Uncaught SyntaxError: Unexpected token '<' (at 报错
  • 增值税专用发票怎么开
  • 汇算清缴的所得税怎么做账
  • 活动委托书范本
  • wordpress怎么添加图片
  • php 多进程
  • 公司给部分员工长期停工怎么办
  • 会议期间的餐费算会务费吗
  • 财务费用相关指标
  • 货币基金分红交多少税
  • sqlserver并发怎么处理
  • 罚款支出算费用吗
  • 捆绑销售的会计处理?
  • 会计凭证借贷方哪个是收入
  • 盖骑缝章的合同可以双面打印吗
  • 购买的固定资产退货怎么做账
  • 会计手工做账的目的
  • 财产租赁合同印花税申报期限
  • 子公司注销如何注销
  • 已抵扣进项税额转出的会计分录怎么做
  • 会计科目用错如何改正
  • 银行承兑汇票向银行申请贴现会计分录
  • 企业购买土地时土地款缴纳的耕地占用税入账
  • Windows Sever 2016技术预览版3 本月发布
  • window7 32位系统
  • 组策略配置锁屏
  • 如何不让qq开机自启
  • win10在哪里找
  • 电脑ie8浏览器
  • linux查看使用率命令
  • Android中SurfaceView的使用详解
  • Extjs4 GridPanel 的几种样式使用介绍
  • perfcurve函数
  • perl中sub
  • javascript数据结构与算法第三版
  • shell脚本实现批量移动文件
  • 批处理的扩展名
  • unity3d2019教程
  • 深入理解新发展理念
  • androidstudio如何放大代码
  • 说几条javascript的基本规范
  • 国家税务总局在哪
  • 复函地税务机关对自产货物原材料向上游发函
  • 网约车考试全国过了区域没过
  • 双方交换住房可以吗
  • 建筑业增值税纳税义务发生时间包括
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设