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中删除.但是在线程包含对象的地图之前和之后的代码.
国家的javadoc expireAfterAccess:
过期的条目可能会被计入
Cache.size(),但读取或写入操作将永远不可见.过期的条目将作为javadoc类中描述的例行维护的一部分进行清理.
这意味着即使条目被计算在内.size(),它们也不会在任何其他操作中可见.
这些无效条目将自动删除.根据javadoc,这发生在以下情况:
.get()方法将触发内部清理,javadoc没有为此定义任何时间段.Cache.cleanUp():更多信息似乎在缓存类的Github Wiki中进行了解释.
如果要在删除条目时注意,可以使用RemovalListener.您可以使用在cachebuilder上设置此侦听器.removalListener(...).