[英]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.