我有一套代币:
private Set<Token> tokenSeen;
其中
Token is [id, expirationtime]
每个令牌都有不同的客户端设置的到期时间。
因此,当到期时间发生时,我想从tokenSeen set中删除令牌。
答案 0 :(得分:0)
您可能希望使用按到期时间排序的有序集。然后定期检查第一个元素,何时过期将其删除。之后再次检查新的第一个元素,如果已过期则删除它。重复直到(当前)第一个元素没有到期(并且由于到期时间的排序,所有其他元素也不应该过期)。
要定期检查,您可能需要使用Quartz或计时器等调度程序,具体取决于您的整体架构。
答案 1 :(得分:0)
使用迭代器迭代集合中的所有元素,并删除任何具有旧过期时间的元素。如果没有对您删除的令牌的引用,那么Java Garbage Collector将在执行时从内存中清除它们。
Date now = new Date();
Set<Token> tokenSeen = new HashSet<Token>();
Iterator<Token> iterator = tokenSeen.iterator();
while (iterator.hasNext()) {
Token token = iterator.next();
if(token.expirationtime.before(now))
iterator.remove();
}
答案 2 :(得分:0)
您可以设置DelayQueue
来跟踪哪些元素已过期并将其删除。