java - 安排定期运行方法´

标签 java methods timer scheduler runnable

我必须安排一个方法在启动时执行,然后每隔 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();
        }
    }
};

最佳答案

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

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

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

在本例中,它的工作原理如下:箭头 -> 将表达式转换为 lambda。 () 是参数列表,它是空的,因为 run 方法没有参数。箭头后面的 loadConfig() 是主体,其工作方式与方法主体相同。

由于 scheduleAtFixedRate 需要一个 Runnable 作为参数,因此它将成为表达式的目标类型,并且 lambda 将成为该类型的对象。

关于java - 安排定期运行方法´,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30839390/

相关文章:

java - Java 中静态的最佳用途是什么

Java 时间/日期格式

c# - 什么是在另一个被调用的方法中的方法?

c# - 使用方法切换 BorderStyle。 C#

python - Python 中的类、方法和多态性

java - 指定 main 方法接受的参数类型的目的是什么?

java - 修改jar文件的合规级别

java - Java 中带参数的方法

python - 时间是 Python。它是如何工作的?

android - 如何在几秒钟内转移到另一个 Activity ?