如何在特定时间 stop/cancel ScheduledExecutorService 中的任务?

How to stop/cancel a task in ScheduledExecutorService at particular time?

例如,我有一个任务应该在 8:00-20:00 之间每天每分钟执行一次。

所以我计算 8:00 和我的应用程序启动时间 initialDelay 之间的时间间隔,并使用 Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(command, initialDelay, 1, TimeUnit.MINUTE)

问题是,我是否需要第二个计时器来观察任务并在时钟到达20:00时取消它?或者我是否必须在每次执行任务时比较时间是否为 20:00?

您可能需要一个真正的调度程序。

参见石英 https://quartz-scheduler.org

它应该符合您的需要

对于 cron 语法:http://quartz-scheduler.org/api/2.2.0/org/quartz/CronTrigger.html

或者用流利的APIhttp://quartz-scheduler.org/api/2.2.0/org/quartz/TriggerBuilder.html