【问题标题】:Expiring Map with signaling capability when element expires元素过期时具有信令功能的过期映射
【发布时间】:2012-05-08 13:53:58
【问题描述】:

任何人都可以指出一个好的实现,如果存在的话,我在 Java 中称之为Ticking collection/Map。集合中的元素有一些过期时间。当集合的特定元素过期时,集合会引发某种警报或调用处理程序。

我看到了一个过期映射的 Guava 实现,它会自动删除已过期的密钥。

Expiring map

【问题讨论】:

  • 那么,为什么你不能接受 Guava 实现呢?
  • “我看到一个过期映射的 Guava 实现,它会自动删除已过期的密钥。”我不是说我需要一个在元素到期时发出警报而不是删除它们。确定它是否具有该功能,我将使用它,如果您可以告诉我它是否具有该功能。
  • 注册一个removalListener 以获知过期物品如何?

标签: java data-structures collections


【解决方案1】:

guava 支持驱逐回调:

    Cache<String, String> cache = CacheBuilder.newBuilder()
            .expireAfterAccess(100, TimeUnit.SECONDS)
            .removalListener(new RemovalListener<Object, Object>() {
                public void onRemoval(RemovalNotification<Object, Object> objectObjectRemovalNotification) {
                    //do something
                }
            })
            .build();

【讨论】:

  • 哦,对不起,我没有看到 assylias 的评论!
  • 没问题 - 我不确定它是否解决了这个问题,因为在 javadoc 中的某个地方它说如果地图条目已经被 GC'ed + 如果 OP 想要放回该项目,则它可能为空进入地图,有一个短暂的时间窗口,在此期间条目不再在地图中。
  • 这不是仅适用于使用弱键/值的情况吗?我需要调查更多...
  • 这就是我的想法,但我不确定。
  • 很抱歉您的回复。非常感谢!您能否告诉我谷歌提供的库的使用条款到底是什么。在不违反任何使用条款的情况下在企业应用程序中使用它可以吗?
猜你喜欢
  • 2020-01-19
  • 2020-07-18
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 2014-03-18
  • 2015-08-19
相关资源
最近更新 更多