因此,我想尝试一下Timer和TimerTask类。
30秒过后,我能够执行一行代码。我现在一直想做的是让这行代码执行5分钟。
这是我最初尝试的
public static void main(String[] args) { for ( int i = 0; i <= 10; i ++ ) { Timer timer = new Timer(); timer.schedule( new TimerTask() { public void run() { System.out.println("30 Seconds Later"); } }, 30000 ); } }
我在for循环中使用了数字10,以查看timer.schedule在循环的下一次迭代期间是否还要再等待30秒。
知道我应该怎么做吗?我尝试将schedule方法与传入参数period一起使用,但这只是使其重新执行而从未停止过。
您遇到的问题是,计划的Timer运行在不同的线程上- 也就是说,for循环的下一次迭代在计划后立即开始运行,而不是在30秒后开始。看起来您的代码一次全部启动了10个计时器,这意味着它们应该在30秒后一次全部(大约)打印。
Timer
for
尝试使用schedule(带有第三个参数的)循环版本时,您处在正确的轨道上。如您所述,这不是您想要的,因为它可以无限期运行。但是,Timer 确实 有一种cancel方法可以防止后续执行。
schedule
cancel
因此,您应该尝试类似的方法:
final Timer timer = new Timer(); // Note that timer has been declared final, to allow use in anon. class below timer.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 );