• 循环执行某段代码,待某种条件满足后停止循环 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秒(如果你的任务对时间敏感,这将会有影响)
  • 相关阅读:
    笔记 | FastAPI创建新项目
    【Python】进阶(学习笔记)
    【网页设计】基于HTML+CSS+JavaScript制作美食网站舌尖上的美食
    Vue 基本模板语法(入门级别)
    Cilium系列-11-启用带宽管理器
    Spring+SpringBoot+SpringCloud 全攻略
    Linux文件系统的功能规划
    通过matlab实现水产养殖鱼类成熟度自动分析系统
    MySQL环境变量配置的教程
    联邦学习:对“数据隐私保护”和“数据孤岛”困境的破局
  • 原文地址:https://blog.csdn.net/yyuggjggg/article/details/133910388