在周期性时间安排 运行 一个方法'

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();
        }
    }
};

由于 Runnablean interface,您需要提供一个实现该接口的对象。最简单的方法(不一定是最干净的)是编写一个实现该接口的匿名内部 class。

在编写该对象时,您会发现必须实现 run() 方法。在该方法中,您可以简单地调用周围对象的 loadConfig() 方法。

使用以下语法,您可以创建一个 lambda 表达式,其计算结果为 Runnable 类型的对象。当调用该对象的 run 方法时,将调用 loadConfig 方法。

scheduler.scheduleAtFixedRate(() -> loadConfig(), 60, 60, TimeUnit.SECONDS);

Lambda 表达式是 Java 8 的新功能。

在这种情况下,它是这样工作的:箭头 -> 使表达式成为 lambda。 () 是参数列表,它是空的,因为 run 方法没有参数。箭头后面的loadConfig()是方法体,和方法体一样。

由于 scheduleAtFixedRate 期望 Runnable 作为参数,这将是表达式的目标类型,lambda 将成为该类型的对象。