對於非常基本的需求,您確實可以像使用ScheduledExecutorService
一樣使用,但如果您想在一天中的某個特定時間執行復雜任務,例如計劃任務,則應考慮使用quartz-scheduler。
下面是如何在晚上10點計劃任務:
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail job = JobBuilder.newJob(MySchedular.class)
.withIdentity("job1", "group1")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(22, 00))
.build();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(job, trigger);
// and start it off
scheduler.start();
與cron expression創建的同一個觸發器將是:
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger3", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0 22 00 * * ?"))
.build();
擔心的不是CPU會忙,因爲當代碼正在等待一個(長達一個月的)定時器時,進程應該休眠。更大的問題來自於流程結束(例如,機器重新啓動)並且沒有任何可以重新啓動的問題。不同的系統有不同的機制來處理這些交錯的任務,* nixs有'cron',但我不知道你的系統。 – msw
您使用哪個版本的Java? –
你使用哪個操作系統? –