如果我做对了,调用get(key(的线程将被阻塞,直到第一个线程完成缓存加载。但是,如果它无法加载缓存,会发生什么?(例如引发异常(。调用get(key(的另一个线程会重试缓存加载吗?
是的,对加载缓存的所有调用要么获取存储的值,要么尝试从CacheLoader
的下游源阻塞并获取值。
来自Wiki页面(重点是我的(:
LoadingCache
是用附加的CacheLoader
构建的Cache
。(…(查询LoadingCache
的规范方法是使用方法get(K)
。这将返回已缓存的值,或者使用缓存的CacheLoader将新值原子加载到缓存中。
此外:
因为
CacheLoader
可能抛出Exception
,所以LoadingCache.get(K)
抛出ExecutionException
。(…(您也可以选择使用getUnchecked(K)
,它将所有异常封装在UncheckedExecutionException
中,但如果底层CacheLoader
通常会抛出已检查的异常,这可能会导致令人惊讶的行为。