我有一个需要按一定间隔触发的系统

如果给出以下内容:

minutes:25, seconds:10


然后,它应每小时触发一次,每隔25分钟10秒触发一次。例如7:25:10、8:25:10、9:25:10,依此类推。

这将非常简单,并且我已经使该代码起作用了。问题在于,仅当系统至少每秒检查一次时,它才起作用,否则它将错过触发器。

那么,如何检查自上次检查以来触发单位是否与当前时间单位匹配?两次检查之间的时间差异很大。

触发单元的存储方式如下:

// units that must match the current time <Calendar Unit, Trigger>
private Map<Integer, Integer> triggerUnits;

最佳答案

首先移动到枚举而不是地图。枚举可以包含小时,秒,天等等。好的新功能是,此类枚举已在JDK中存在,并称为TimeUnit。该枚举的每个成员都知道将时间转换为其他单位。

因此,解析字符串hour:5。将5小时转换为3600 * 5 * 1000毫秒。该值将在您的系统中使用。您有几种可能,但我建议您从java.util.Timer开始。每个任务都可以在计时器中安排。它使用一个线程执行所有任务。

如果愿意,可以使用Executors框架:

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.schedule(...);


此处的schedule方法直接与时间单位一起使用。您甚至不必将一个单元翻译成另一个单元。

关于java - 自上次检查以来,检查具有匹配单位的时间是否过去,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16706033/

10-12 04:04
查看更多