位置: IT常识 - 正文

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

发布时间:2024-01-17
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 转载请保留说明!

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

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

  • 成功路上并不拥挤 坚持就是胜利(成功路上并不拥挤图片)

    成功路上并不拥挤 坚持就是胜利(成功路上并不拥挤图片)

  • lenovo蓝牙耳机怎么连接手机(lenovo蓝牙耳机怎么配对)

    lenovo蓝牙耳机怎么连接手机(lenovo蓝牙耳机怎么配对)

  • dcim是什么文件夹(DCIM是什么文件如何恢复)

    dcim是什么文件夹(DCIM是什么文件如何恢复)

  • 剑网3唐门怎么样(剑网唐门怎么样)

    剑网3唐门怎么样(剑网唐门怎么样)

  • 电脑版WPS文档编辑受限怎么办(电脑版wps文档编辑在哪里)

    电脑版WPS文档编辑受限怎么办(电脑版wps文档编辑在哪里)

  • 13系统什么时候推送

    13系统什么时候推送

  • 为什么拼多多会自动扣费(为什么拼多多会有隐私号)

    为什么拼多多会自动扣费(为什么拼多多会有隐私号)

  • 18650充电电压5v可以吗(18650充电电压4.5v可以吗)

    18650充电电压5v可以吗(18650充电电压4.5v可以吗)

  • 苹果屏幕录制失败因为-5822(苹果屏幕录制失败还能找回吗)

    苹果屏幕录制失败因为-5822(苹果屏幕录制失败还能找回吗)

  • 抖音群里最多可以加入多少人(抖音群里最多可加多少人)

    抖音群里最多可以加入多少人(抖音群里最多可加多少人)

  • 安卓手机强制重启死机(安卓手机强制重启方法有哪些)

    安卓手机强制重启死机(安卓手机强制重启方法有哪些)

  • 怎么关闭苹果自动删除不常用软件(怎么关闭苹果自动亮屏功能)

    怎么关闭苹果自动删除不常用软件(怎么关闭苹果自动亮屏功能)

  • ip地址主要特点是(ip当前地址)

    ip地址主要特点是(ip当前地址)

  • 苹果上市时间(苹果上市时间顺序)

    苹果上市时间(苹果上市时间顺序)

  • 小米摄像头换了wifi怎么设置(小米摄像头换了wifi怎么重新连接)

    小米摄像头换了wifi怎么设置(小米摄像头换了wifi怎么重新连接)

  • win10会自己安装驱动吗(win10会自己安装显卡驱动吗)

    win10会自己安装驱动吗(win10会自己安装显卡驱动吗)

  • 笔记本电脑睡眠和关机有什么区别(笔记本电脑睡眠后无法唤醒屏幕)

    笔记本电脑睡眠和关机有什么区别(笔记本电脑睡眠后无法唤醒屏幕)

  • 上网静态ip是什么意思(静态ip是wifi吗)

    上网静态ip是什么意思(静态ip是wifi吗)

  • 爱奇艺视频没有弹幕功能了怎么办(爱奇艺视频没有声音怎么办)

    爱奇艺视频没有弹幕功能了怎么办(爱奇艺视频没有声音怎么办)

  • poi数据是什么意思(poi数据的获取方式)

    poi数据是什么意思(poi数据的获取方式)

  • vivoz5x充电要多久(vivoz5x手机充电慢怎么办)

    vivoz5x充电要多久(vivoz5x手机充电慢怎么办)

  • 天猫精灵app怎么加好友(天猫精灵app怎么连接网络)

    天猫精灵app怎么加好友(天猫精灵app怎么连接网络)

  • 小红书怎样重置爱好(小红书怎样重置IP)

    小红书怎样重置爱好(小红书怎样重置IP)

  • mts文件怎么打开(手机上怎么把mts转换成mp4)

    mts文件怎么打开(手机上怎么把mts转换成mp4)

  • 苹果11pro机身尺寸(苹果11pro机身尺寸比较)

    苹果11pro机身尺寸(苹果11pro机身尺寸比较)

  • 苹果x怎么开启无线充电(苹果x怎么开启静音模式)

    苹果x怎么开启无线充电(苹果x怎么开启静音模式)

  • 手机流量被限速了怎么恢复(手机流量被限速了怎样解除)

    手机流量被限速了怎么恢复(手机流量被限速了怎样解除)

  • 小米平板4可以用笔吗(小米平板4可以用触控笔吗)

    小米平板4可以用笔吗(小米平板4可以用触控笔吗)

  • 打字输入法怎么设置(输入法怎么设置打字带拼音)

    打字输入法怎么设置(输入法怎么设置打字带拼音)

  • 智慧生命体yoyo怎么用(智慧生命体运用在那些方面)

    智慧生命体yoyo怎么用(智慧生命体运用在那些方面)

  • 企业之间借款利息进项税可以抵扣吗
  • 招待客人的住宿费能抵扣吗?
  • 百分百控股的企业是否负连带责任
  • 小规模纳税人免征增值税政策
  • 网络服务费属于什么费用
  • 代办汽车过户手续
  • 股权投资基金账户有监管吗
  • 运输费可以和货款合并开票吗
  • 限制性股票科目
  • 土地出让金进项税税率
  • 作为展示用的物品
  • 工企业用地土地使用税怎么征收?
  • 包装报废会计处理
  • 为什么企业要预缴增值税
  • 个体户交税起征点 2023年
  • 电子发票可以打多少行
  • 费用无发票财务怎么做账
  • 累计已确认收入极可能不会发生重大转回
  • 购买超市购物卡打几折
  • 开票金额与收入金额有差额可以吗
  • 发票金额大于实际支付金额如何报账
  • 增值税增量留抵退税政策解读
  • swstrtr.exe - swstrtr是什么进程
  • 监控 固定资产
  • 计算土地增值税时契税可以扣除吗
  • win服务器安装
  • win11系统开机密码怎么修改
  • 铡什么意思
  • php file_exists 检查文件或目录是否存在的函数
  • 有留抵税额怎么做分录
  • vite中文网
  • 固定资产不计提折旧有什么影响
  • framework4.0怎么打开
  • php中的函数
  • 劳动仲裁的调解款要扣税吗
  • echarts遇到的坑
  • 违约金税目
  • java 读写锁 map
  • mongodb $lookup
  • 出口退税转内销的损失
  • 企业季度所得税申报流程
  • 发票票种核定发票种类怎么选
  • 企业所得税的减免税额
  • 主营业务收入科目按其所归属的会计要素不同
  • 制造费用的结转正确的是( )
  • 低值易耗品如何摊销
  • 期初固定资产算收入吗
  • 加计扣除是指什么意思
  • 坏账准备的余额百分比法
  • 货样广告品出口如何申报
  • 预收账款的借贷方向增减
  • 发票几个月内可以红冲
  • 计划成本法和实际成本法的适用范围
  • 合法有效的凭证是什么
  • win8.1无法进入系统
  • Linux 下 (RedHat 9.0) JDK,Tomcat,MySQL的安装
  • os x10.11el capitan beta6更新了什么?os x10.11el capitan beta6发布下载
  • 教大家一些实用的技巧方法
  • 升级win10系统后电脑变卡处理方法
  • win10鼠标怎么换
  • linux中wget命令出现错误
  • windows 8.1有哪些版本
  • dev c++怎么配置环境
  • js中如何实现数字相加
  • cocos2dx怎么用
  • Javascript获取元素的父元素
  • vue mint-ui 官网
  • 使用node写接口
  • 网页过关类游戏
  • javascript初学者书籍
  • js的变量
  • jquery prototype
  • Javascript中Array.prototype.map()详解
  • js方法不执行
  • 税控盘忘记抄报罚多少
  • 深圳少儿电子医保卡怎么用
  • 河北电子税务局如何添加办税人员
  • 公益性公墓免交税吗
  • 江苏国税,地税怎么交
  • 税务局临时工工资多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号