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计划任务)每天运行一次程序,并根据文本文件/持久存储内容选择要运行的任务。