我希望我的程序在晚上9点之前调用方法。
那么,是否有一个监听器在某个时间连续检查时间并触发方法?
如果没有,我如何让程序每隔60秒调用一次方法?
非常感谢< 3
答案 0 :(得分:2)
除非您自己制作,否则没有定期用Java检查的监听器。要安排在特定时间发生的事情,通常会延迟执行时间与现在时间之间的差异。你可以用Java 8的日期/时间API很好地完成这项工作。如果你想在今天晚上9点触发某些事情,我建议:
final LocalDateTime now = LocalDateTime.now();
final LocalDateTime ninePMToday = LocalDateTime.now()
.withHour(21)
.withMinute(0)
.withSecond(0)
.withNano(0);
final ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
ses.schedule(() -> System.out.println("It's 9pm!"),
now.until(ninePMToday, ChronoUnit.MILLIS),
TimeUnit.MILLISECONDS);
您还可以安排它在每天晚上9点重复执行,并对调度程序调用进行小调整:
ses.scheduleAtFixedRate(() -> System.out.println("It's 9pm!"),
now.until(ninePMToday, ChronoUnit.MILLIS),
TimeUnit.DAYS.toMillis(1),
TimeUnit.MILLISECONDS);
更改上面的代码以调整60秒间隔(有关详细信息,请查看调度程序方法的文档)。
答案 1 :(得分:1)
您必须使用任何调度程序。我建议使用QuartzJob。你需要:
class MyJob implements Job {
public void execute (JobExecutionContext ctx) {
}
}
CronTrigger:
CronTrigger trigger = new CronTrigger();
trigger.setName("myTrigger");
trigger.setCronExpression("0 * * * * ?");
和一个新的调度程序:
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);