如何在java程序中以固定的时间间隔进行操作?
基本上,我有一个int值x,它是一个类的实例变量。初始设置为0。我有另一个方法“getNum”,它递增并返回x。此getNum()方法由外部程序调用。然而,每天(比如说,为了简单起见,在午夜),我都想将x重置为0。如何做到这一点?我现在遇到的问题是:Date(int,int,int)已被弃用,但该方法只接受日期,不接受日历;TimerTask事件从未发生过;每次我运行底部的程序时,它每次只打印“0”,即使数字不应该不断重置。基本上,什么都不管用。你知道怎么回事吗如何在java程序中以固定的时间间隔进行操作?,java,methods,time,timer,instance,Java,Methods,Time,Timer,Instance,基本上,我有一个int值x,它是一个类的实例变量。初始设置为0。我有另一个方法“getNum”,它递增并返回x。此getNum()方法由外部程序调用。然而,每天(比如说,为了简单起见,在午夜),我都想将x重置为0。如何做到这一点?我现在遇到的问题是:Date(int,int,int)已被弃用,但该方法只接受日期,不接受日历;TimerTask事件从未发生过;每次我运行底部的程序时,它每次只打印“0”,即使数字不应该不断重置。基本上,什么都不管用。你知道怎么回事吗 import java.util
import java.util.*;
class Foo {
private static void scheduleTimer() {
Timer timer = new Timer();
long c = 86400000;
timer.scheduleAtFixedRate(new MyTimerTask(),
new Date(2011, 7, 31), c);
}
public static int getNum() { return x++; }
private static int x = 0;
public static void resetNum() { x = 0; }
}
class MyTimerTask() extends TimerTask {
public void run() {
Foo.resetNum();
}
public class Bar { // in a separate file
public static void main (String[] args) {
System.out.println(Foo.getNum());
}
}
根据
scheduleAtFixedRate(TimerTask,Date,long)
的文档:
为重复的固定速率执行计划指定的任务,
在指定的时间开始。随后的处决发生在
近似规则的间隔,由指定的周期分隔
因此,调用任务大约需要86400000毫秒。你真的等了那么久才确认它不工作吗?根据
scheduleAtFixedRate(TimerTask,Date,long)的文档:
为重复的固定速率执行计划指定的任务,
在指定的时间开始。随后的处决发生在
近似规则的间隔,由指定的周期分隔
因此,调用任务大约需要86400000毫秒。你真的等了那么久才确认它不工作吗?修复两个编译错误,在某个地方调用Foo.scheduleTimer()来实际启动计时器,给计时器一个合理的延迟和周期(比如几秒钟),然后重复调用Foo.getNum(),而不是只调用一次。例如:
import java.util.Timer;
import java.util.TimerTask;
public class Foo {
public static void scheduleTimer() {
Timer timer = new Timer();
long c = 3000;
timer.scheduleAtFixedRate(new MyTimerTask(), c, c);
}
public static int getNum() { return x++; }
private static int x = 0;
public static void resetNum() { x = 0; }
}
class MyTimerTask extends TimerTask {
public void run() {
Foo.resetNum();
}
}
class Bar {
public static void main(String[] args) throws Exception {
Foo.scheduleTimer();
while (true) {
System.out.println(Foo.getNum());
Thread.sleep(1000);
}
}
}
修复两个编译错误,在某个地方调用Foo.scheduleTimer()来实际启动计时器,给计时器一个合理的延迟和周期(比如几秒钟),然后重复调用Foo.getNum(),而不是只调用一次。例如:
import java.util.Timer;
import java.util.TimerTask;
public class Foo {
public static void scheduleTimer() {
Timer timer = new Timer();
long c = 3000;
timer.scheduleAtFixedRate(new MyTimerTask(), c, c);
}
public static int getNum() { return x++; }
private static int x = 0;
public static void resetNum() { x = 0; }
}
class MyTimerTask extends TimerTask {
public void run() {
Foo.resetNum();
}
}
class Bar {
public static void main(String[] args) throws Exception {
Foo.scheduleTimer();
while (true) {
System.out.println(Foo.getNum());
Thread.sleep(1000);
}
}
}
我假设在某个地方发生了对scheduleTimer的实际调用?从这个片段中也很难判断实际发生了什么。如果java应用程序退出,我的理解是该变量值不会持久。如果您希望它这样做,当main()只调用它然后退出时,您在这里的设计中出现了一些错误。我假设在某个地方发生了对scheduleTimer的实际调用?从这个片段中也很难判断实际发生了什么。如果java应用程序退出,我的理解是该变量值不会持久。如果您希望它这样做,那么当main()只调用它然后退出时,您在这里的设计中出现了一些错误。不,我尝试了3000毫秒/3秒到30秒,但没有成功。864000000,一天,是我确认它有效后的最终结果。不,我尝试了3000毫秒/3秒到30秒,但没有一个有效。864000000,总有一天,是我确认它有效后的最终结果。