You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何通过while循环停止java.util.Timer定时器运行

问题根源

  • 变量作用域错误:你定义的i是TimerTask匿名内部类的成员变量,main方法中的while循环无法直接访问该变量,外层循环的判断条件完全不生效。
  • 重复调度任务错误:同一个TimerTask实例仅能被Timer调度一次,你在外层循环中反复调用timer.schedule()方法给同一个任务注册调度,直接触发IllegalStateException异常。
  • 调度逻辑设计错误:Timer的固定间隔调度仅需调用一次schedule方法即可完成注册,无需循环调用,停止逻辑应该内嵌在TimerTask的run方法中,满足条件时主动终止任务即可。

正确实现代码

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

public class TestUtilTimer {
    public static void main(String[] args) {
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            int i = 0;
            @Override
            public void run() {
                System.out.println("Timer ran for:" + ++i);
                // 此处替换为实际项目中查询在线数据库返回true的判断逻辑即可
                if (i >= 10) {
                    // 取消当前定时任务
                    this.cancel();
                    // 终止定时器,释放所有资源
                    timer.cancel();
                    System.out.println("Timer已按预期停止运行");
                }
            }
        };
        // 仅需调度1次:0延迟启动,每隔1000ms执行一次任务
        timer.schedule(task, 0, 1000);
    }
}

注意事项

实际项目中接入数据库查询逻辑时,建议在查询逻辑外层增加异常捕获,避免单次查询报错导致整个定时任务意外终止。

内容的提问来源于stack exchange,提问作者NiNoes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 04:57:03