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

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

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

  • 苹果13promax是5g手机吗(苹果13promax是什么屏幕)

    苹果13promax是5g手机吗(苹果13promax是什么屏幕)

  • 魅族18s是2k屏吗(魅族18 18s 18x)

    魅族18s是2k屏吗(魅族18 18s 18x)

  • 小米手环4复制不了门禁卡(小米手环复制的门禁卡不能用)

    小米手环4复制不了门禁卡(小米手环复制的门禁卡不能用)

  • 将er图转换为关系模式的过程属于(将er图转换为关系模式时,实体和联系)

    将er图转换为关系模式的过程属于(将er图转换为关系模式时,实体和联系)

  • 哈罗单车忘记锁怎么办(哈罗单车忘记锁车怎么处理)

    哈罗单车忘记锁怎么办(哈罗单车忘记锁车怎么处理)

  • 加入抖音公会的利弊(加入抖音公会的开播收入可以自提吗)

    加入抖音公会的利弊(加入抖音公会的开播收入可以自提吗)

  • 华为手机还原设置在哪(华为手机还原设置后怎样恢复)

    华为手机还原设置在哪(华为手机还原设置后怎样恢复)

  • qq群直播可以回放吗(qq群直播回看在哪里)

    qq群直播可以回放吗(qq群直播回看在哪里)

  • 为什么小红书发布的内容别人看不到(为什么小红书发不了评论)

    为什么小红书发布的内容别人看不到(为什么小红书发不了评论)

  • oppoa8怎么关机(oppoa8怎么关机重启)

    oppoa8怎么关机(oppoa8怎么关机重启)

  • accesstoken失效是什么意思(accesstoken error)

    accesstoken失效是什么意思(accesstoken error)

  • 微信通讯录可以存多少人(微信通讯录可以加多少好友)

    微信通讯录可以存多少人(微信通讯录可以加多少好友)

  • 苹果电话降噪需要打开吗(苹果手机降噪功能设置打开还是关闭?)

    苹果电话降噪需要打开吗(苹果手机降噪功能设置打开还是关闭?)

  • 华为滚动截图怎么操作(华为滚动截图怎么操作方法)

    华为滚动截图怎么操作(华为滚动截图怎么操作方法)

  • 爱奇艺hdr和蓝光哪个清晰(爱奇艺hdr和蓝光的区别)

    爱奇艺hdr和蓝光哪个清晰(爱奇艺hdr和蓝光的区别)

  • 手机上显示的hd是什么意思(手机上显示的hd是什么意思?)

    手机上显示的hd是什么意思(手机上显示的hd是什么意思?)

  • 哔哩哔哩怎么下载音频(哔哩哔哩怎么分享完整视频)

    哔哩哔哩怎么下载音频(哔哩哔哩怎么分享完整视频)

  • 天猫精灵怎么连接手机(天猫精灵怎么连空调)

    天猫精灵怎么连接手机(天猫精灵怎么连空调)

  • 手机qq群如何设置头衔(手机qq群如何设置只看老师消息)

    手机qq群如何设置头衔(手机qq群如何设置只看老师消息)

  • 乐视手机为什么会卡(乐视手机为什么安装不了应用)

    乐视手机为什么会卡(乐视手机为什么安装不了应用)

  • wps找回未保存的文件(wps找回未保存的文件手机版)

    wps找回未保存的文件(wps找回未保存的文件手机版)

  • 小米耳机怎么换歌(小米耳机怎么换设备)

    小米耳机怎么换歌(小米耳机怎么换设备)

  • 拼多多里面怎么双收藏(拼多多里面怎么设置别人看不到自己的动态)

    拼多多里面怎么双收藏(拼多多里面怎么设置别人看不到自己的动态)

  • 黑鲨有小爱同学语音吗(黑鲨小爱同学叫不出来)

    黑鲨有小爱同学语音吗(黑鲨小爱同学叫不出来)

  • 米8青春版支持快充吗(米8青春版支持两张电信卡吗)

    米8青春版支持快充吗(米8青春版支持两张电信卡吗)

  • 京东咋样取消申请退款(京东申请取消订单怎么取消)

    京东咋样取消申请退款(京东申请取消订单怎么取消)

  • 表格页面设置怎么设置(表格页面设置怎么设置页码变成几千页)

    表格页面设置怎么设置(表格页面设置怎么设置页码变成几千页)

  • 场景推广是什么意思(场景推广适合什么产品)

    场景推广是什么意思(场景推广适合什么产品)

  • 电脑怎么解除密码(电脑怎么解除密码win7)

    电脑怎么解除密码(电脑怎么解除密码win7)

  • 车辆购置税的纳税义务发生时间为
  • 价外税怎么理解
  • 消费税征收范围包括
  • 咨询服务业涉及税费
  • 公司期权激励如何兑现
  • 公司账户美金入账
  • 农产品一般纳税人开普票免税吗
  • 工资中事假扣款执行依据
  • 签章是签字还是盖章 财务
  • 房产开发后自用需要交土地增值税吗
  • 增值税专用发票税额怎么抵扣
  • 跨境电商有进口吗
  • 合伙企业无偿获得股权怎么缴税?
  • 如何理解出口退税政策
  • 质保期内质量问题
  • 原油资源税计税方法
  • 增值税免税收入进项税额转出
  • 新注册成立的公司可以往前补交社保吗
  • 挂靠管理费有收税前还是收税后?
  • 收入准则建造合同预付款
  • 出纳人员赔偿
  • 管理费用劳务费包括什么
  • 增值税防伪税控系统采用什么技术保护涉税信息
  • 将原材料变成成品的过程
  • 收到苗木发票怎么做账
  • 预缴增值税附加税款怎么填写申报表
  • 合同的情势变更是什么
  • mac dock不见了
  • php初学实例教程
  • 金税盘的服务费
  • 360se进程太多
  • 电脑椅什么牌子质量好
  • 企业以物易物如何确认收入
  • 评价指标mae
  • 委托代销商品的会计分录怎么做
  • 所得税季报本月数是指
  • php计算给定日期的时间
  • 个人开发app最简单方法
  • acc字幕文件怎么转换srt字幕
  • 融资租入固定资产
  • 新手为什么要买二手车
  • 金融资产发生减值的客观证据包括哪些
  • dubbo 实现原理
  • 金蝶怎么设置销售出库单模板
  • 主营业务成本应交税费
  • 企业之间支付的管理费指什么
  • 所得税费用期末结转吗
  • 财务费用利息收入是什么意思
  • 补贴收入税收政策
  • 外购的商品
  • 合并报表中的抵消分录是什么意思?
  • 缴纳残保金工资是实发工资还是应发工资
  • 发票盖错章怎么擦掉
  • 分期收款发出商品是什么意思
  • 资产负债表的编制依据是会计恒等式
  • sql查询和遍历数据
  • linux 更新系统
  • win8.1进入桌面
  • win10如何关闭windows安全中心图标
  • ctd module
  • linux操作系统主要用来干嘛?
  • Linux编译内核无法启动
  • win7系统电脑蓝牙怎么开
  • 侠客驱动是什么意思
  • win10系统怎么关闭病毒防护
  • 怎么对js代码程序进行设计
  • javascript事件绑定学习要点
  • cocos2d schedule
  • unity3d 游戏开发 消息通信
  • javascript判断语句
  • 关于H1的位置解析
  • android开发范例实战宝典
  • 批处理系统的进程调度算法
  • androiddialog圆角
  • unity协程的工作原理
  • 异步promise原理
  • 个体经营所得申报密码怎样设置
  • 村级公益性支出是什么
  • 内蒙古国地税联合办税服务厅
  • 八戒财税兼职
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设