這聽起來像是一個時間單位給我的問題。確保您正確轉換爲毫秒。
最簡單的方法是使用Java的TimeUnit
。
Timer cleaner = new Timer(true);
cleaner.scheduleAtFixedRate(new MyTimerTask(),
TimeUnit.SECONDS.toMillis(10),
TimeUnit.SECONDS.toMillis(30));
它也被Timer
引起正在啓動在守護進程模式。如果你所有的主要方法都設置了定時器,然後返回,定時器將永遠不會執行,因爲它是剩餘的最後一個線程,因爲它是一個守護進程線程,JVM將退出。
要解決這個問題,要麼使計時器線程不是守護進程(即在構造函數中傳遞false
),要麼讓主線程在退出之前等待用戶輸入。
下面是使用兩種以上的例子:
public class TimerDemo extends TimerTask {
public void run() {
System.out.printf("Time is now %s%n", LocalTime.now());
}
public static void main(String[] args) throws IOException {
Timer timer = new Timer(true);
timer.scheduleAtFixedRate(new TimerDemo(),
TimeUnit.SECONDS.toMillis(5),
TimeUnit.SECONDS.toMillis(10));
System.out.printf("Program started at %s%n", LocalTime.now());
System.out.println("Press enter to exit");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
// Wait for user to press enter
reader.readLine();
}
System.out.println("Bye!");
}
}
並運行它的輸出:
Program started at 14:49:42.207
Press enter to exit
Time is now 14:49:46.800
Time is now 14:49:56.799
Time is now 14:50:06.799
Time is now 14:50:16.799
Time is now 14:50:26.799
[I pressed 'enter']
Bye!
Process finished with exit code 0
是的,你是對的Raniz。問題出在從main方法退出run方法不執行之後。所以,我必須把睡眠放在主線程中。 –
如果它解決了您的問題,請隨時接受我的答案。它通過在搜索結果中解決這個問題來幫助他人。 – Raniz