![](/img/trans.png)
[英]How to run certain task every day at a particular time using ScheduledExecutorService?
[英]How to run a task DURING PARTICULAR PERIOD OF TIME with ScheduledExecutorService?
我正在嘗試創建一個計划作業,每天從早上 7 點到下午 22 點每 5 分鍾運行一次。 例如,它應該在 7:00、7:05、7:10 ... 21:55 運行,然后它應該在 22:00 停止。 第二天,它再次運行相同的計划,依此類推。
我發現這個例子展示了如何使用ScheduledExecutorService
在特定時間啟動任務。 如何使用 ScheduledExecutorService 每天在特定時間運行某些任務?
我參考了答案並編寫了如下代碼:(我使用的是 Java 7)
class Scheduler {
private ScheduledExecutorService executors;
public static void main(String[] arg) {
Runnable task = new Runnable() {
@Override
public void run() {
...DO SOMETHING...
}
};
// Get how many seconds before the next start time (7AM).
long initDelay = getInitialDelay(7);
ScheduledExecutorService executors = Executors.newSingleThreadScheduledExecutor();
executors.scheduleAtFixedRate(task, initDelay, (60 * 5), TimeUnit.SECONDS);
}
private static long getInitialDelay(int hour) {
Calendar calNow = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
long diff = cal.getTimeInMillis() - calNow.getTimeInMillis();
if (diff < 0) {
cal.add(Calendar.DAY_OF_MONTH, 1);
diff = cal.getTimeInMillis() - calNow.getTimeInMillis();
}
return diff / 1000;
}
}
我上面的代碼從早上 7 點開始,每 5 分鍾完美運行一次。 但是,如何控制ScheduledExecuterService
在下午 22 點停止任務,然后在第二天早上 7 點重新開始?
或者,有沒有更好的其他方法可以在每天的特定時間段內運行任務?
固定的預定執行程序服務不能改變其時間。
所以使用單次運行的非固定預定執行器服務。 調用ScheduledExecutorService::schedule
。 在第一次運行時,檢查當前時間。 如果在工作日結束之前,再次調用相同的方法schedule
,傳遞五分鍾的延遲。 如果在工作日結束后延遲八小時,即新工作日開始前的時間量。
所以,一個簡單的小技巧。 可運行的每次運行都會無休止地安排下一次運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.