gpt4 book ai didi

java - 有生存时间的消息队列

转载 作者:行者123 更新时间:2023-11-30 06:09:27 26 4
gpt4 key购买 nike

我寻找一个队列,该队列在特定时间(即 10 秒)内最多存储 N 个元素,或者如果已满则应处理最旧的值。

我在 Apache Collections (CircularFifoQueue JavaDoc) 中发现了一个类似的队列,它忽略了生存时间方面的问题。一个完整的消息代理似乎是我的小项目的开销。

你介意给我一个提示,我应该如何实现它吗?我是否应该在轮询元素时过滤掉旧值?

最佳答案

有一个类叫做LinkedHashMap它有一个特殊的方法来删除陈旧的数据。来自文档:

protected boolean removeEldestEntry(Map.Entry eldest)
Returns true if this map should remove its eldest entry.

方法removeEldestEntry 在任何时候被添加到列表(队列)时被调用。如果它返回 true 则删除最老的条目以为新条目腾出空间,否则什么也不会删除。您可以添加自己的实现,它会检查最老条目的时间戳,如果它早于到期阈值(例如 10 秒),则返回 true。所以你的实现可能看起来像这样:

protected boolean removeEldestEntry(Map.Entry eldest) {
long currTimeMillis = System.currentTimeMillis();
long entryTimeMillis = eldest.getValue().getTimeCreation();

return (currTimeMillis - entryTimeMillis) > (1000*10*60);
}

关于java - 有生存时间的消息队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37809326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com