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
相关产品推荐
相关产品推荐

