Guava库学习:学习Guava Cache(二)Guava caches(2)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    链接地址:http://www.xx566.com/detail/168.html

    上一篇,Guava库学习:学习Guava Cache(二)Guava caches(1)_Cache中我们简单的介绍了Guava Cache中一个最基本的接口:Cache,我们简单的了解了其中的一些方法,本篇我们继续学习Guava Cache中另外一个基本的接口:LoadingCache。接下来,我们开始,Guava库学习:学习Guava Cache(二)Guava caches(2)_LoadingCache。

    

    LoadingCache接口扩展了Cache接口的自动装载的功能,考虑下面的代码实例:

Book book = loadingCache.get(id);

    在上面的代码中, 如果book对象在get方法调用执行的时候不可用,LoadingCache知道怎样返回对象,保存在缓存中,然后返回value值。

 

    Loading values

    由于LoadingCache的实现是线程安全的,通过同样的key值调用get方法,当缓存还在装载的时候就会阻塞线程。一旦value值被加载,该调 用将返回最原始的调用get方法返回的value值,然而,多个通过不同key值的调用则会并发的加载,如果我们拥有一个键值的集合,并且想要去检索每个 键对应的value值,我们需要像下面这样调用:

ImmutableMap map = cache.getAll(Iterable);

    如上所示,getAll方法返回了一个不可变的Map集合,通过指定键值以及与键值关联的缓存中的value值,getAll返回的map可能是所有缓存的value值,也可能是新检索到的value值,或者是已有缓存和新检索到的value值的混合。

 

    Refreshing values in the cache

    LoadingCache 同样提供了一种缓存中更新value值的机制:

refresh(key);

    通过调用refresh方法,LoadingCache会检索到对应key新的value值,当前的value值在新的value值返回前不会被从缓存出 废弃,这意味着如果在加载的过程中调用get方法,则会返回缓存中当前的value值。如果在refresh方法调用中出现异常,原始的value值会依 然在缓存中保存。需要记住的是:如果value值被异步的检索,在value值被真正的更新前,方法都将会返回原始的value值。

转载于:https://my.oschina.net/realfighter/blog/350033

你可能感兴趣的:(Guava库学习:学习Guava Cache(二)Guava caches(2))