我必须安排一个方法在开始时执行,之后每隔1分钟安排一次。
为此我做了这个:
string
这是错误,因为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() {
...
}
}
答案 0 :(得分:4)
使用以下语法,您可以创建一个lambda表达式,该表达式将计算为Runnable
类型的对象。当调用该对象的run
方法时,将调用loadConfig
方法。
scheduler.scheduleAtFixedRate(() -> loadConfig(), 60, 60, TimeUnit.SECONDS);
Lambda表达式是一种新的Java 8功能。
在这种情况下,它的工作原理如下:箭头->
将表达式转换为lambda。 ()
是参数列表,它是空的,因为run
方法没有参数。箭头后面的loadConfig()
是正文,其工作方式与方法正文相同。
由于scheduleAtFixedRate
期望Runnable
作为参数,这将是表达式的目标类型,而lambda将成为该类型的对象。
答案 1 :(得分:1)
由于Runnable
是an interface,您需要提供实现该接口的对象。最简单的方法(不一定是最干净的)就是编写一个实现该接口的匿名内部类。
在编写该对象时,您将看到必须实现run()
方法。在该方法中,您只需调用周围对象的loadConfig()
方法即可。