当缓存加载失败时,Guava缓存会用另一个线程重试缓存加载吗



如果我做对了,调用get(key(的线程将被阻塞,直到第一个线程完成缓存加载。但是,如果它无法加载缓存,会发生什么?(例如引发异常(。调用get(key(的另一个线程会重试缓存加载吗?

是的,对加载缓存的所有调用要么获取存储的值,要么尝试从CacheLoader的下游源阻塞并获取值。

来自Wiki页面(重点是我的(:

LoadingCache是用附加的CacheLoader构建的Cache。(…(查询LoadingCache的规范方法是使用方法get(K)。这将返回已缓存的值,或者使用缓存的CacheLoader将新值原子加载到缓存中

此外:

因为CacheLoader可能抛出Exception,所以LoadingCache.get(K)抛出ExecutionException。(…(您也可以选择使用getUnchecked(K),它将所有异常封装在UncheckedExecutionException中,但如果底层CacheLoader通常会抛出已检查的异常,这可能会导致令人惊讶的行为。

最新更新