您遇到的问题是,计划的
Timer运行在不同的线程上-
也就是说,
for循环的下一次迭代在计划后立即开始运行,而不是在30秒后开始。看起来您的代码一次全部启动了10个计时器,这意味着它们应该在30秒后一次全部(大约)打印。
尝试使用
schedule(带有第三个参数的)循环版本时,您处在正确的轨道上。如您所述,这不是您想要的,因为它可以无限期运行。但是,
Timer
确实 有一种
cancel方法可以防止后续执行。
因此,您应该尝试类似的方法:
final Timer timer = new Timer();// Note that timer has been declared final, to allow use in anon. class belowtimer.schedule( new TimerTask(){ private int i = 10; public void run() { System.out.println("30 Seconds Later"); if (--i < 1) timer.cancel(); // Count down ten times, then cancel }}, 30000, 30000 //Note the second argument for repetition);


