Java 如何在设置的时间运行方法?

Java 如何在设置的时间运行方法?,java,timer,Java,Timer,现在,我正在做一个项目,我的设置是这样的:我有一个类(Foo),其中有几个方法,必须在不同的时间由主类激活 我已经研究了很长一段时间了,我唯一能找到的是定时器类,它不太管用,因为它似乎只能给一个类计时,我不希望这样一个基本程序有25个不同的类 如何分别激活Foo中的每个方法?下面的类使用TimerTask(MethodTimerTask)的扩展,该扩展接受Foo实例和要调用的方法名称的输入 通过这种方式,使用反射,只需一个扩展的TimerTask类,就可以在不同的时间调用不同的方法 public

现在,我正在做一个项目,我的设置是这样的:我有一个类(
Foo
),其中有几个方法,必须在不同的时间由主类激活

我已经研究了很长一段时间了,我唯一能找到的是
定时器
类,它不太管用,因为它似乎只能给一个类计时,我不希望这样一个基本程序有25个不同的类


如何分别激活
Foo
中的每个方法?

下面的类使用
TimerTask
MethodTimerTask
)的扩展,该扩展接受
Foo
实例和要调用的方法名称的输入

通过这种方式,使用反射,只需一个扩展的
TimerTask
类,就可以在不同的时间调用不同的方法

public class MyTimerTaskExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Timer timer = new Timer();
        Foo foo = new Foo();
        timer.schedule(new MethodTimerTask(foo, "method1"), 1000);
        timer.schedule(new MethodTimerTask(foo, "method2"), 3000);
    }

    public static class MethodTimerTask extends TimerTask {

        private String methodName;
        private Foo fooInstance;
        private Exception exception;

        public MethodTimerTask(Foo fooInstance, String methodName) {
            this.methodName = methodName;
            this.fooInstance = fooInstance;
        }

        @Override
        public void run() {
            try {
                Foo.class.getMethod(methodName).invoke(fooInstance);
            } catch (Exception e) {
                this.exception = e;
            }
        }

        public Exception getException() {
            return exception;
        }

        public boolean hasException() {
            return this.exception != null;
        }

    }

    public static class Foo {

        public void method1() {
            System.out.println("method1 executed");
        }

        public void method2() {
            System.out.println("method2 executed");
        }

    }

}

额外好处:方法
getException()
返回在执行
Foo
methodName
时捕获的最终异常。如果我理解正确,您只想单独调度每个方法?类似于
MyMethodTimer.call(foo.methodA).in5分钟();MyMethodTimer.call(foo.methodB).in15分钟()(非工作代码!)?如果是这样的话,恐怕情况会比看起来更复杂。这绝不是一个好的设计,尽管你的程序可能很小。如果是这样的话,在定期发生的事件触发后触发时间检查会更有效吗?你的意思是,像一个大的
if()
构造成一个
TimerTask
执行时间检查并在给定时间调用适当的方法?准确地说。唯一的问题是,目的是每天运行不同的方法。无法确定当天的方法是否已经运行。创建一个存储变量的外部文本文件是可行的,还是有更好的方法?在您运行日常任务时,我建议您使用某种持久性存储,例如文本文件。当您的程序每天只执行一次任务时,它真的需要一直运行吗?我建议您改为使用OS任务调度器工具(
cron
或Windows计划任务)每天运行一次程序,并根据文本文件/持久存储内容选择要运行的任务。