Guava CacheBuilder没有按预期工作

Saj*_*ara 0 java collections dictionary guava

嗨,我是谷歌番石榴收藏品的新手,所以我需要收集,这将在一段时间内到期.所以我写了下面的代码,但它没有在过期时删除数据.任何人都可以告诉我代码的问题是什么.

Cache<String, Object> cache = CacheBuilder.newBuilder()
                .expireAfterAccess(2, TimeUnit.MILLISECONDS)
                .build();
        Object object = new Object();            
        cache.put(object.getId(), object);
        System.out.println("size :" + cache.size());
        Thread.sleep(50000);
        System.out.println("After Size :" + cache.size());
Run Code Online (Sandbox Code Playgroud)

我需要添加对象来映射,并且在到期时间之后它将从map中删除.但是在线程包含对象的地图之前和之后的代码.

Fer*_*big 5

国家的javadoc expireAfterAccess:

过期的条目可能会被计入Cache.size(),但读取或写入操作将永远不可见.过期的条目将作为javadoc类中描述的例行维护的一部分进行清理.

这意味着即使条目被计算在内.size(),它们也不会在任何其他操作中可见.

这些无效条目将自动删除.根据javadoc,这发生在以下情况:

  • 使用get访问该条目:
    映射看到该条目已过时并直接将其删除.
  • 偶尔的缓存访问:
    有时访问该.get()方法将触发内部清理,javadoc没有为此定义任何时间段.
  • 手动调用Cache.cleanUp():
    直接触发清理例程并删除所有过期的条目.

更多信息似乎在缓存类的Github Wiki中进行了解释.

如果要在删除条目时注意,可以使用RemovalListener.您可以使用在cachebuilder上设置此侦听器.removalListener(...).