小编典典

使程序运行5分钟

java

因此,我想尝试一下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一起使用,但这只是使其重新执行而从未停止过。


阅读 361

收藏
2020-11-30

共1个答案

小编典典

您遇到的问题是,计划的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 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
);
2020-11-30