我想知道这堂课的问题在哪里,我正在制作一个每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);
}
}
我认为这个测试必须每秒给我一个随机数,但是在第一秒后该过程终止。 对不起英语不好,感谢任何建议
答案 0 :(得分:0)
当您的main()
线程终止时,应用程序也会终止。
只需在代码末尾添加Thread.sleep(10000)
即可。然后它会工作10秒钟。
和强>
关于如何使用cancel方法,请咨询this answer。我想你不想在那里使用它。
和强>
更改日程安排类型,使用
timer.scheduleAtFixedRate(new UpdaterTask(), 0, seconds*1000);
答案 1 :(得分:0)
schedule(task, delay)
仅执行一次任务。 schedule(task, delay, period)
以固定延迟重复执行任务。
timer.schedule(new UpdaterTask(), 0, seconds * 1000)
删除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
}
}
}