码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 循环执行某段代码,待某种条件满足后停止循环 java原始Timer实现


    代码实现

    使用Timer即可,下述是示例代码

    public static void main(String[] args) {
        Timer timer = new Timer();
        AtomicInteger time = new AtomicInteger(0);
        log.info("开始执行=====================");
        long tim = 2000;
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                log.error("停止执行");
                timer.cancel();
            }
        }, 7000);
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                int i = time.incrementAndGet();
                log.error("执行" + i + "次");
                if (i == 5 ){
                    timer.cancel();
                }
            }
        }, 1000, tim);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    运行结果

    17:04:54.155 [main] INFO testTimer.testM - 开始执行=====================
    17:04:55.163 [Timer-0] ERROR testTimer.testM - 执行1次
    17:04:57.160 [Timer-0] ERROR testTimer.testM - 执行2次
    17:04:59.174 [Timer-0] ERROR testTimer.testM - 执行3次
    17:05:01.159 [Timer-0] ERROR testTimer.testM - 停止执行
    
    • 1
    • 2
    • 3
    • 4
    • 5

    缺点

    一:Timer线程不会捕获异常,所以TimerTask抛出的未检查的异常会终止timer线程。

    • 如果Timer线程中存在多个计划任务,其中一个计划任务抛出未检查的异常,则会引起整个Timer线程结束,从而导致其他计划任务无法得到继续执行。

    二:Timer线程时基于绝对时间(如:2023/02/14 16:06:00),因此计划任务对系统的时间的改变是敏感的。

    • 假如你希望任务1每个10秒执行一次,某个时刻,你将系统时间提前了6秒,那么任务1就会在4秒后执行,而不是10秒后

    三:Timer是单线程,如果某个任务很耗时,可能会影响其他计划任务的执行。

    • Timer执行程序是有可能延迟1、2毫秒,如果是1秒执行一次的任务,1分钟有可能延迟60毫秒,一小时延迟3600毫秒,相当于3秒(如果你的任务对时间敏感,这将会有影响)
  • 相关阅读:
    计算机毕业设计Java校园统一网络授课平台系统(源码+系统+mysql数据库+Lw文档)
    10 编译2022年最新的U-Boot源码,并用QEMU模拟器运行
    vue3中axios的使用方法
    Java入门第109课——集合的size、clear、isEmpty用法
    阿里也出手了!Spring CloudAlibaba AI问世了
    GraphQL入门之使用ApolloServer和express构建GraphQL服务
    高阶 DS --- AVL 树
    OJ项目——统一数据格式返回,我是如何处理的?
    微服务09-Sentinel的入门
    【python】 int、float、double与16进制字符串的互相转换
  • 原文地址:https://blog.csdn.net/yyuggjggg/article/details/133910388
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号