如何在 Java 中每天在设定的时间运行代码? [复制]
Posted
技术标签:
【中文标题】如何在 Java 中每天在设定的时间运行代码? [复制]【英文标题】:How do I run code at a set time every day in Java? [duplicate] 【发布时间】:2021-05-28 22:51:25 【问题描述】:目前正在研究某种算法,我需要每天在同一时间运行代码。我试过创建一个计时器,但我对它并不熟悉,我能做的最多就是每 x 秒运行一次代码。我知道我可以每 86400 秒做一次,但这似乎充其量只是一个笨拙的解决方案,我觉得有更好的解决方案。如果您有任何想法,请告诉我。非常感谢。
【问题讨论】:
如果转换为秒或毫秒是您唯一的问题,请使用TimeUnit.DAYS.toMillis(1) 或Duration.ofDays(1).toMillis() 必须是 Java 吗?为什么不使用 cron(如果您在 Linux 上)或 Task Scheduler(如果您在 Windows 上)? 您可以使用 cronJobs 在定义的时间安排作业。参考这个链接***.com/questions/22163662/… 同一个问题的解决方法如下链接:[调度器详情][1][1]:***.com/questions/7814089/… 【参考方案1】:如果你想在特定时间(比如 10:00)运行yourTask()
,你可以这样做:
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 10);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
Timer timer = new Timer();
timer.schedule(yourTask(), today.getTime(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS));
【讨论】:
这不会编译,您需要将TimerTask
引用传递给schedule()
,但目前您正在直接执行yourTask()
Calendar
类多年前被 JSR 310 中定义的 java.time 类取代。Timer
多年前被ScheduledExecutorService
取代。
这很好用!非常感谢。上面的评论是正确的 yourTask() 没有工作,我只是在调度程序中定义了 run() 方法,它工作正常。【参考方案2】:
您可以使用不同的调度程序。例如Quartz 就是其中之一
【讨论】:
以上是关于如何在 Java 中每天在设定的时间运行代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章