guava_ch

Using the Suppliers.memoizeWithExpiration method

Suppliers.memoizeWithExpiration 方法与memoize方法以相同的方式工作,但是在给定时间之后会死亡。当调用get时,包装Supplier对象从代理Supplier对象上取得实例。之后,包装Supplier对象缓存实例一段给定的时间。要注意到实例并不是在物理缓存中持有;而是包装Supplier对象持有一个实例变量,这个变量由代理的Supplier对象设置并返回。看下例子:

Supplier<Predicate<String>> wrapped =
Suppliers.memoize(composedPredicateSupplier,10L,TimeUnit.MINUTES);

再次包装Supplier,并设置超时时间为10分钟。对于ComposedPredicateSupplier而言并没有什么变化,但Supplier返回的对象可能有改变,例如从数据库中获取数据,这时memoizeWithExpiration`方法会十分有用。