T
- Type of the cached data.
public interface TimeStampedGenerator<T extends TimeStamped>
时间戳缓存
中创建条目的生成器。
只要生成器仅被一个缓存
引用,就保证以线程安全的方式调用它,即使在多线程环境中使用缓存。缓存负责调度调用此接口中定义的所有方法,因此一次只有一个线程使用它们。实现类无需自行处理同步或锁。
生成器由缓存
的用户提供,并且应与他将使用缓存数据的方式保持一致。
如果条目必须具有定期的时间间隔(例如每3600秒一个条目),则生成器必须确保所有生成的条目都准确位于预期的定期网格上,即使它们是以随机顺序生成的。原因是缓存可能会要求在不同范围内获取条目,然后合并这些范围。一个典型的例子是,缓存首先在2012-02-19T17:48:00周围调用生成器生成6个点,当这些点用尽后,再次在2012-02-19T23:20:00周围调用生成器生成6个新点。如果所有点必须确切地相隔3600秒,生成器应该在2012-02-19T15:00:00、2012-02-19T16:00:00、2012-02-19T17:00:00、2012-02-19T18:00:00、2012-02-19T19:00:00和2012-02-19T20:00:00生成第一批6个点,然后在2012-02-19T21:00:00、2012-02-19T22:00:00、2012-02-19T23:00:00、2012-02-20T00:00:00、2012-02-20T01:00:00和2012-02-20T02:00:00生成下一批6个点。如果点之间的间隔无关紧要,第一个点可以在17:48:00而不是17:00:00或18:00:00生成。缓存将在同一全局时间段内合并从不同调用返回的数组。
Modifier and Type | Method and Description |
---|---|
List<T> |
generate(AbsoluteDate existingDate, AbsoluteDate date)
生成按时间顺序排序的要缓存的条目列表。
|
List<T> generate(AbsoluteDate existingDate, AbsoluteDate date)
如果existingDate
早于date
,则生成的条目覆盖的范围必须至少从existingDate
(不包括)到date
(包括)。如果existingDate
晚于date
,则生成的条目覆盖的范围必须至少从date
(包括)到existingDate
(不包括)。
如果生成器更喜欢一次生成大块数据,则生成的条目可能覆盖比上述最小范围更大的范围。它可能再次生成早期调用(通常在existingDate
处)已经生成的条目,缓存将默默忽略这些额外的条目。
未覆盖最小范围可能导致数据丢失,因为缺口将不会在后续调用中由GenericTimeStampedCache
填充。
生成的条目必须按时间顺序排序。
existingDate
- 最接近的已存在条目的日期(可能为null)
date
- 生成数组范围必须覆盖的日期
Copyright © 2002-2023 CS GROUP. All rights reserved.