请在这里找到我的要求。我有一个InvokeTimer类,它每秒钟/分钟/小时调用一次TimerClass。在TimerClass的运行库中,需要在每秒钟触发一次计时器时执行逻辑,即其stats1实例和其他逻辑是否stats2的实例,如果每分钟(类似一个小时)触发一次。请帮助我。我该怎么做?

public class TimerClass extends TimerTask{
    @Override
    public void run() {
    if(stats1){
        //logic
    }else if(stats2){
        //logic
    }else{
     //logic3
    }
}

public class InvokeTimer {
        TimerClass  stats1 = new TimerClass();
        TimerClass  stats2 = new TimerClass();
        TimerClass  stats3 = new TimerClass();
        Timer timer = new Timer(true);

        timer.scheduleAtFixedRate(stats1, 0, 1 * 1000);
        timer.scheduleAtFixedRate(stats2, 0, 60 * 1000);
        timer.scheduleAtFixedRate(stats3, 0, 24* 60 * 1000);
}

最佳答案

老实说,我认为您最好的选择是使您的计时器匿名类每个都支持run()方法。例如,这将是一个每秒发出哔哔声的TimerClass:

TimerClass stats1 = new TimerClass() {
    @Override
    public void run() {
        java.awt.Toolkit.getDefaultToolkit().beep();
    }
};

Timer timer = new Timer(true);
timer.scheduleAtFixedRate(stats1, 0, 1 * 1000);

您可以为每个统计数据使用一个,在每个统计数据的方法中具有独特的逻辑。

检查使用同一方法运行的所有版本的统计信息并不是一种可靠的设置方法,但是如果设置不正确,我想您可以使TimerClass对象的实例变量可用,然后在if-中声明说
if(this.equals(stats1))
     //logic

但是我认为您需要在同一.java文件中同时使用这两个类,以便TimerTask能够看到它们。如果我是你,我会坚持前一种方法。

您可以在这里找到有关匿名类的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

10-08 09:08