java - 如何使用 Java 在特定时间触发一个方法?

标签 java time

我希望我的程序在晚上 9 点时调用一个方法。

那么,是否有一个监听器可以连续检查时间并在某个时间触发一个方法?

如果不是,如何让程序每 60 秒调用一个方法?

非常感谢<3

最佳答案

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 秒间隔(查看调度程序方法的文档以获取更多信息)。

关于java - 如何使用 Java 在特定时间触发一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40236934/

相关文章:

java - "How to fix ' MFA身份验证数据库连接错误“

java - 选择文本中的所有模式

Java Base64 编码字节数组到 javax.activation.DataHandler

PHP - 等待 2 小时执行查询

c - 运行的进程不遵循系统时间

python - 相当于 Linux 上的 GetTickCount()

php - 与数据库中的多个日期和时间进行比较

java - 设置 Datomic 类路径函数以供 Windows 中的事务处理程序使用

java - SQS FIFO 使用 MessageGroupId 接收消息

Java-设置 datetime17 :30 if the current time is before 17:00