我有一个需要按一定间隔触发的系统
如果给出以下内容:
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/