我需要替换 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/