对于非常基本的需求,您确实可以像使用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? –
你使用哪个操作系统? –