Returns the value associated with
key in this cache, first loading that value if
necessary. No observable state associated with this cache is modified until loading
completes. Unlike
#get, this method does not throw a checked exception, and thus should
only be used in situations where checked exceptions are not thrown by the cache loader.
If another call to
#get or
#getUnchecked is currently loading the value for
key, simply waits for that thread to finish and returns its loaded value. Note that
multiple threads can concurrently load values for distinct keys.
Caches loaded by a
CacheLoader will call
CacheLoader#load to load new values
into the cache. Newly loaded values are added to the cache using
Cache.asMap().putIfAbsent after loading has completed; if another value was associated
with
key while the new value was loading then a removal notification will be sent for
the new value.
Warning: this method silently converts checked exceptions to unchecked exceptions,
and should not be used with cache loaders which throw checked exceptions. In such cases use
#get instead.