如何在java程序中以固定的时间间隔进行操作?

如何在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

基本上,我有一个int值x,它是一个类的实例变量。初始设置为0。我有另一个方法“getNum”,它递增并返回x。此getNum()方法由外部程序调用。然而,每天(比如说,为了简单起见,在午夜),我都想将x重置为0。如何做到这一点?我现在遇到的问题是:Date(int,int,int)已被弃用,但该方法只接受日期,不接受日历;TimerTask事件从未发生过;每次我运行底部的程序时,它每次只打印“0”,即使数字不应该不断重置。基本上,什么都不管用。你知道怎么回事吗

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,总有一天,是我确认它有效后的最终结果。