Java - 接受时间源的计时器类

标签 java timer

我需要替换 java.util.Timer 或 java.util.concurrent.ScheduledExecutorService 来接受时间源,以便可以从系统时间一些其他引用中驱动它。我使用此计时器定期执行一个方法,但当应用程序处于“实时”模式时,需要由系统时间驱动该周期,当应用程序处于“播放”模式时,需要由其他一些源驱动。

我确实看到有一些第三方库,例如 Guava 秒表,其功能与我所要求的类似,但由于我正在开发的信息系统的政策,我更喜欢 Java 原生的库。

我可能最终不得不编写自己的,但我在这里问,因为这似乎是许多人都会有的需要......无论是在使用具有替代时间流逝概念的应用程序时还是在测试带有嵌入式计时器的单元时.

最佳答案

您可以通过执行以下操作来使用自定义时间源实现java.util.concurrent.ScheduledExecutorService:

计算自定义时间源和系统时间(初始化时)之间的偏移量或增量,并在 ScheduledExecutorService 的实现中保留该增量。当调用 schedule (以及接口(interface)中的类似方法)时,请使用您在初始化时计算的相同偏移量,并将这些偏移量应用到所提供的 TimeUnits 上。这样,您就可以依赖调度程序的现有实现。

关于Java - 接受时间源的计时器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23820454/

相关文章:

java - 如何使用不同导入的双定时器

java - 在流口水中使用 LHS 的辅助方法

java - 如何将图像导入到java类中

node.js - libuv 和 Node.js 实际上是如何调度定时器的?

java - Android 上点击定时器

bash - 仅在用户输入期间运行的计时器

java - 12.10 无法安装 eclipse

java - setContentPane() 有效,但 getContentPane().add() 不起作用

java - tr Locale、Windows 7 和 Linux 中的日期格式给出 2 个结果

android - 定时器、TimerTask 和电池消耗