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函数的综合应用 的相关文章

随机推荐

  • 简易多元线性回归学习

    目录 多元线性回归 一 问题分析 二 数据预处理 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