簡體   English   中英

計划定期運行方法´

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

使用以下語法,您可以創建一個 lambda 表達式,該表達式將計算為Runnable類型的對象。 當調用該對象的run方法時,將調用loadConfig方法。

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

Lambda 表達式是 Java 8 的一項新功能。

在這種情況下,它的工作方式如下:箭頭->使表達式成為 lambda。 ()是參數列表,它是空的,因為run方法沒有參數。 箭頭后面的loadConfig()是主體,其工作方式與方法主體相同。

由於scheduleAtFixedRate需要一個Runnable作為參數,這將是表達式的目標類型,而 lambda 將成為該類型的對象。

由於Runnable一個 interface ,您需要提供一個實現該接口的對象。 最簡單的方法(不一定是最干凈的)是編寫一個實現該接口的匿名內部類。

在編寫該對象時,您將看到必須實現run()方法。 在該方法中,您可以簡單地調用周圍對象的loadConfig()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM