在周期性时间安排 运行 一个方法'
Schedule to run a method at periodic time´
我必须安排一个方法在启动时执行,此后每隔 1 分钟定期执行一次。
为此,我这样做了:
public void init(){
loadConfig(); //method which needs to be executed periodically
Timer scheduler = new Timer();
scheduler.scheduleAtFixedRate(loadConfig(),60000,60000);
}
这是一个错误,它应该是因为 scheduleAtFixedRate
的第一个参数是 Runnable
类型。
我需要的建议是如何使我的 loadConfig
方法 Runnable
并且在调度程序启动之前 loadConfig()
时仍然执行它。
目前代码结构如下:
public class name {
public void init() {
...
}
...
public void loadConfig() {
...
}
}
编辑:这是我已经尝试过的方法
public void init(){
loadConfig();
Timer scheduler = new Timer();
scheduler.scheduleAtFixedRate(task,60000,60000);
}
final Runnable task = new Runnable() {
public void run() {
try {
loadConfig();
} catch (Exception e) {
e.printStackTrace();
}
}
};
由于 Runnable
是 an interface,您需要提供一个实现该接口的对象。最简单的方法(不一定是最干净的)是编写一个实现该接口的匿名内部 class。
在编写该对象时,您会发现必须实现 run()
方法。在该方法中,您可以简单地调用周围对象的 loadConfig()
方法。
使用以下语法,您可以创建一个 lambda 表达式,其计算结果为 Runnable
类型的对象。当调用该对象的 run
方法时,将调用 loadConfig
方法。
scheduler.scheduleAtFixedRate(() -> loadConfig(), 60, 60, TimeUnit.SECONDS);
Lambda 表达式是 Java 8 的新功能。
在这种情况下,它是这样工作的:箭头 ->
使表达式成为 lambda。 ()
是参数列表,它是空的,因为 run
方法没有参数。箭头后面的loadConfig()
是方法体,和方法体一样。
由于 scheduleAtFixedRate
期望 Runnable
作为参数,这将是表达式的目标类型,lambda 将成为该类型的对象。
我必须安排一个方法在启动时执行,此后每隔 1 分钟定期执行一次。
为此,我这样做了:
public void init(){
loadConfig(); //method which needs to be executed periodically
Timer scheduler = new Timer();
scheduler.scheduleAtFixedRate(loadConfig(),60000,60000);
}
这是一个错误,它应该是因为 scheduleAtFixedRate
的第一个参数是 Runnable
类型。
我需要的建议是如何使我的 loadConfig
方法 Runnable
并且在调度程序启动之前 loadConfig()
时仍然执行它。
目前代码结构如下:
public class name {
public void init() {
...
}
...
public void loadConfig() {
...
}
}
编辑:这是我已经尝试过的方法
public void init(){
loadConfig();
Timer scheduler = new Timer();
scheduler.scheduleAtFixedRate(task,60000,60000);
}
final Runnable task = new Runnable() {
public void run() {
try {
loadConfig();
} catch (Exception e) {
e.printStackTrace();
}
}
};
由于 Runnable
是 an interface,您需要提供一个实现该接口的对象。最简单的方法(不一定是最干净的)是编写一个实现该接口的匿名内部 class。
在编写该对象时,您会发现必须实现 run()
方法。在该方法中,您可以简单地调用周围对象的 loadConfig()
方法。
使用以下语法,您可以创建一个 lambda 表达式,其计算结果为 Runnable
类型的对象。当调用该对象的 run
方法时,将调用 loadConfig
方法。
scheduler.scheduleAtFixedRate(() -> loadConfig(), 60, 60, TimeUnit.SECONDS);
Lambda 表达式是 Java 8 的新功能。
在这种情况下,它是这样工作的:箭头 ->
使表达式成为 lambda。 ()
是参数列表,它是空的,因为 run
方法没有参数。箭头后面的loadConfig()
是方法体,和方法体一样。
由于 scheduleAtFixedRate
期望 Runnable
作为参数,这将是表达式的目标类型,lambda 将成为该类型的对象。