参考:Guava详解
expireAfterWrite是指创建指定时间后,没有get过此key,
- get时候会删除旧的entry,放入新的entry,其他线程get()阻塞等待。
refreshAfterWrite是指创建指定时间后,没有get过此key,
- 缓存里面有旧值,会进行同步更新里面的内容,其他线程返回旧值。
- 缓存里面没有值,会进行同步更新里面的内容,其他线程等待。(源码这里走的跟expireAfterWrite走的逻辑一样)
expireAfterWrite与refreshAfterWrite同时配置的话。
- expire小于等于refresh时间,优先expire失效,同时满足走expire(无法refresh)。
- expire大于refresh时间,优先refresh,同时满足走expire。
LoadingCache的refresh()方法是异步的,当前线程更新,其他线程返回旧值。(只配置expireAfterWrite也一样)