我的java类更新程序不会更新

时间:2013-05-24 12:08:19

标签: java timer timertask

我想知道这堂课的问题在哪里,我正在制作一个每n秒做一次的课,但它似乎只做了一次。 这是班级

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

public class Updater {
    private Timer timer;
    public Updater(int seconds){
        timer = new Timer();
        timer.schedule(new UpdaterTask(), seconds*1000);
    }
    class UpdaterTask extends TimerTask {
        public void run() {
            System.out.println(Math.random());
            timer.cancel();
        }
    }
}

这是测试

public class TestUpdater {
    public static void main(String[] args){
        new Updater(1);
    }
}

我认为这个测试必须每秒给我一个随机数,但是在第一秒后该过程终止。 对不起英语不好,感谢任何建议

3 个答案:

答案 0 :(得分:0)

当您的main()线程终止时,应用程序也会终止。

只需在代码末尾添加Thread.sleep(10000)即可。然后它会工作10秒钟。

关于如何使用cancel方法,请咨询this answer。我想你不想在那里使用它。

更改日程安排类型,使用

timer.scheduleAtFixedRate(new UpdaterTask(), 0, seconds*1000);

答案 1 :(得分:0)

  1. schedule(task, delay)仅执行一次任务。 schedule(task, delay, period)以固定延迟重复执行任务。

    timer.schedule(new UpdaterTask(), 0, seconds * 1000)
    
  2. 删除cancel()

    // timer.cancel();
    

答案 2 :(得分:0)

您需要发表评论timer.cancel()来电。这使得计时器本身在第一次执行计时器任务后停止。

然后,为了重复执行,您应该使用scheduleAtFixedRate方法(delay == 0)立即开始执行任务,并period == x seconds每隔x seconds运行一次。

class Updater {
    private Timer timer;
    public Updater(int seconds){
        timer = new Timer();
        timer.scheduleAtFixedRate(new UpdaterTask(), 0, seconds*1000); // use scheduleAtFixedRate method
    }
    class UpdaterTask extends TimerTask {
        public void run() {
            System.out.println(Math.random());
            //timer.cancel(); --> comment this line
        }
    }
}