Java定时任务调度工具详解之Timer篇(初级)Timer函数的综合应用

2023-11-09

一.通过模拟两个机器人的定时行为来加深对Timer相关函数的理解。

实现两个机器人第一个机器人会隔两秒打印最近一次计划的时间,执行内容

第二个机器人会模拟往桶里倒水,知道桶里的水满为止

这里写图片描述

这里写图片描述

代码示例:

DancingRobot类

package com.vishuo.timer;

import java.text.SimpleDateFormat;
import java.util.TimerTask;

public class DancingRobot extends TimerTask{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        //获取最近的一次任务执行的时间,并将其格式化
        SimpleDateFormat sf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Scheduled exec time is :"+sf.format(scheduledExecutionTime()));
        System.out.println("Dancing happily");
    }

}

WaterRobot类

package com.vishuo.timer;

import java.util.Timer;
import java.util.TimerTask;

public class WaterRobot extends TimerTask{

    private Timer timer;
    //最大容量为5
    private Integer buketCapacity = 0;
    public WaterRobot(Timer InputTimer){
        timer = InputTimer;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        if(buketCapacity<5){
            //灌水直至桶满为止
            System.out.println("Add 1L water into the bucket!");
            buketCapacity++;
        }else{
            //水满之后就停止执行
            System.out.println("The number of canceled task ion timer is :"+timer.purge());
            cancel();
            System.out.println("The waterRobot has been aborted");
            System.out.println("The number of canceled task ion timer is :"+timer.purge());
            System.out.println("Current water is " + buketCapacity+"L");
            //等待两秒钟,终止timer里面的所有内容
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            timer.cancel();
        }

    }

}

Executor演示类

package com.vishuo.timer;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;

public class Executor {

    public static void main(String[] args) {
        Timer timer = new Timer();
        //获取当前的时间
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current time is :"+sf.format(calendar.getTime()));

        DancingRobot dr = new DancingRobot();
        WaterRobot wr = new WaterRobot(timer);

        timer.schedule(dr, calendar.getTime(),2000);
        timer.scheduleAtFixedRate(wr, calendar.getTime(), 1000);


    }

}

二.Timer的缺陷

管理并发任务的缺陷:
Timer有且仅有一个线程去执行定时任务,如果存在多个任务,且任务时间过长,会导致执行效果与预期不符。

当任务抛出异常时的缺陷:
如果TimerTask抛出RuntimeException,Timer会停止所有任务的运行

Timer的使用禁区
对时效性要求较高的多任务并发作业
对复杂的任务的调度

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java定时任务调度工具详解之Timer篇(初级)Timer函数的综合应用 的相关文章

  • Guice 忽略注入构造函数参数上的 @Nullable

    我正在使用 Guice v 3 0 并且有一个值被注入到构造函数中 该值可以为 null 因此我在构造函数中使用 Nullable 来自 javax annotations 注释了该参数 public MyClass Parameter1
  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐

  • 简易多元线性回归学习

    目录 多元线性回归 一 问题分析 二 数据预处理 excel 1 数据清洗 2 数据全数值化 三 使用EXcel回归 回归实现 回归分析 四 使用代码实现回归 Statsmodels 1 数据处理 2 绘制热力图探讨价格与其他之间的联系 3
  • ceph安装部署

    Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储 软件定义的存储 SDS Ceph 架构 Ceph 核心组件 编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph
  • 灰度发布是什么?

    在如今的互联网时代 大厂都是采用灰度发布的策略进行应用线上部署的 如果身在小公司的测试同学想进入大厂 那么灰度发布就是大家必须要了解的知识点了 希望通过本文能够帮助大家快速的理解什么是灰度发布 并让大家了解研发 运维 测试 运营是如何在这一
  • pnpm与npm和yarn的区别

    作为一名前端程序员 对npm和yarn这两个包管理器一定不陌生 那么你听说过pnpm么 它到底是个什么东西 和npm还有yarn有什么区别 又有什么作用呢 本文就将解决以下这几个问题 pnpm是什么 有什么作用 pnpm有什么优势和特点 p
  • 国产中标麒麟系统-docker安装

    背景 中标麒麟的 华为国产机器 需要安装docker 但是在线安装老是失败 可能操作不对 离线安装可以的 不管怎么样 安装成功就是目的 系统架构是aarch64 如果你是其他系统架构 按照这个步骤离线安装是可以的 不过安装包需要换一下相应路
  • Spring 事务管理

    http www redsaga com spring ref 2 0 html transaction html transaction declarative 9 1 简介 Spring框架引人注目的重要因素之一是它全面的事务支持 Sp
  • 如何不让访问php文件路径,防止别人通过路径查看你的模板文件方法汇总nginx篇...

    为了防止别个盗取你辛苦的模板 做一个安全防护还是有必要的 之前的一篇已经介绍了apache下如何禁止的办法 这一篇将介绍nginx下的方法 通过nginx一般都是通过配置文件nginx conf配置来禁止用户访问的 1 禁止访问corefr
  • Excel大数据量单元格快速填充

    个人简介 一个从会计转行数据分析师的三旬老汉 擅长领域 数据分析 数据仓库 大数据 博客内容 平时会将自己工作中遇到的问题进行归纳总结 分享给各位小伙伴 意在帮助大家少加班 不掉发 让我们相互学习 一起进步 文章目录 前言 一 填充 一 编
  • C51教程 第三个51程序:数码管显示

    keil proteus 第三个51程序 让数码管循环显示0 9 这是一个AT89c51单片机教程 我们每次都会提供博文教程以及附带资料下载 单片机就是一个小型CPU 在电子领域应用广泛 电视 冰箱 洗衣机 空调等产品中都能见到他们的身影
  • 【C语言】让你不再害怕指针——C指针详解(经典,非常详细)

    目录 前言 复杂类型说明 一 细说指针 1 指针的类型 2 指针所指向的类型 3 指针的值 或者叫指针所指向的内存区或地址 4 指针本身所占据的内存区 二 指针的算术运算 三 运算符 和 四 指针表达式 五 数组和指针的关系 六 指针和结构
  • GPT专业应用:如何让GPT策划方案

    身为一名职场打工人 或多或少会面临需要写策划案的难题 不管是策划一场线下活动 还是策划业务发展的方向 甚至到生活中还需要策划婚礼 策划房屋装修 策划和朋友的聚会等等 那么如何快速积累经验 找准方向便成为了不可或缺的技能 在这里 我们将介绍如
  • python输出最长字符串_使用Python打印最长的字母子字符串,并打结...

    我将通过以下方式解决该问题 gt 让我们定义两个字符串 当前字母递增的字符串和当前最长的字符串 gt 两个字符串都以第一个字母初始化 这样我们就可以随时阅读他们的最后一封信 gt 然后遍历输入字符串s 从第二个字符开始 gt 如果当前字符c
  • 合并两个有序单链表(Java)

    思想 准备两个链表l1和l2 判断是否有链表为空 如果l1为空 则不用比较直接返回l2 如果l1为空 则直接返回l2 比较l1和l2节点 选出最小的那个节点 将该节点设为合并后的链表的head 头 节点 同时将指向该节点的l1或l2后移 方
  • 广告投放算法:受众行为分析与人群定向

    引言 物以类聚 人以群分 这句古语不仅揭示了物与人的自组织趋向 更隐含了 聚类 和 人群 之间的内在联系 例如在现代数字广告投放系统中 最为关键的 人群定向 功能正是通过 聚类 算法得以实现的 如果您厌倦了隔靴搔痒的空大宣传 不妨就随笔者一
  • 微信支付服务端开发总结

    原文链接 http blog csdn net baple article details 68059283 前言 最近应公司业务需求 把微信支付完成了 当然已经顺利上线 但是开发的过程是也是踩了很多坑 下面我就先说说开发流程 以及在开发中
  • Kotlin泛型的型变之路

    一 JAVA泛型的协变 简而言之 协变就是 如果A是B的子类 那么Generic a 就是Generic 实际上就是List a
  • SMT精密电阻对照表

    SMT 精密电阻对照表 代码 阻值 代码 阻值 代码 阻值 代码 阻值 01 100 27 187 53 348 79 649 02 102 28 191 54 357 80 665
  • head first 设计模式:策略模式

    策略模式 定义了算法族 分别封装起来 让他们之间可以互相替换 此模式让算法的变化独立于使用算法的客户 差不多应该是不固定模块的分离 当涉及 维护 时 为了 复用 reuse 目的而使用继承 结局并不完美 设计原则 找出应用中可能需要变化之外
  • CMOS图像传感器——了解光圈

    在之前有提到传感器英寸 也提到了曝光三要素之一的ISO 这里主要说明另外一个曝光三要素 光圈 在本文中 我们将介绍光圈及其工作原理 一 什么是光圈 光圈可以定义为镜头中的开口 光线通过该开口进入相机 类比眼睛是的工作原理 就容易理解了 当人
  • Java定时任务调度工具详解之Timer篇(初级)Timer函数的综合应用

    一 通过模拟两个机器人的定时行为来加深对Timer相关函数的理解 实现两个机器人第一个机器人会隔两秒打印最近一次计划的时间 执行内容 第二个机器人会模拟往桶里倒水 知道桶里的水满为止 代码示例 DancingRobot类 package c