Interface AsyncCache<K,V extends @Nullable Object>
- Type Parameters:
K- the type of keys maintained by this cacheV- the type of mapped values
- All Known Subinterfaces:
AsyncLoadingCache<K,V>
get(Object, Function) or put(Object, CompletableFuture), and are stored in the
cache until either evicted or manually invalidated.
Implementations of this interface are expected to be thread-safe and can be safely accessed by multiple concurrent threads.
-
Method Summary
Modifier and TypeMethodDescriptionasMap()Returns a view of the entries stored in this cache as a thread-safe map.get(K key, BiFunction<? super K, ? super Executor, ? extends CompletableFuture<? extends V>> mappingFunction) Returns the future associated with thekeyin this cache, obtaining that value frommappingFunctionif necessary.Returns the future associated with thekeyin this cache, obtaining that value frommappingFunctionif necessary.getAll(Iterable<? extends K> keys, BiFunction<? super Set<? extends K>, ? super Executor, ? extends CompletableFuture<? extends Map<? extends K, ? extends @NonNull V>>> mappingFunction) Returns the future of a map of the values associated with thekeys, creating or retrieving those values if necessary.getAll(Iterable<? extends K> keys, Function<? super Set<? extends K>, ? extends Map<? extends K, ? extends @NonNull V>> mappingFunction) Returns the future of a map of the values associated with thekeys, creating or retrieving those values if necessary.getIfPresent(K key) Returns the future associated with thekeyin this cache, ornullif there is no cached future for thekey.voidput(K key, CompletableFuture<? extends V> valueFuture) Associatesvaluewithkeyin this cache.Returns a view of the entries stored in this cache as a synchronousCache.
-
Method Details
-
getIfPresent
Returns the future associated with thekeyin this cache, ornullif there is no cached future for thekey.- Parameters:
key- the key whose associated value is to be returned- Returns:
- the future value to which the specified key is mapped, or
nullif this cache does not contain a mapping for the key - Throws:
NullPointerException- if the specified key is null
-
get
Returns the future associated with thekeyin this cache, obtaining that value frommappingFunctionif necessary. This method provides a simple substitute for the conventional "if cached, return; otherwise create, cache, and return" pattern.If the specified key is not already associated with a value, attempts to compute its value asynchronously and enters it into this cache unless
null. The entire method invocation is performed atomically, so the function is applied at most once per key. If the asynchronous computation fails, the entry will be automatically removed from this cache.Warning: as with
CacheLoader.load(K),mappingFunctionmust not attempt to update any other mappings of this cache.- Parameters:
key- the key with which the specified value is to be associatedmappingFunction- the function to asynchronously compute a value- Returns:
- the current (existing or computed) future value associated with the specified key
- Throws:
NullPointerException- if the specified key or mappingFunction is null
-
get
CompletableFuture<V> get(K key, BiFunction<? super K, ? super Executor, ? extends CompletableFuture<? extends V>> mappingFunction) Returns the future associated with thekeyin this cache, obtaining that value frommappingFunctionif necessary. This method provides a simple substitute for the conventional "if cached, return; otherwise create, cache, and return" pattern. The instance returned from themappingFunctionwill be stored directly into the cache.If the specified key is not already associated with a value, attempts to compute its value asynchronously and enters it into this cache unless
null. The entire method invocation is performed atomically, so the function is applied at most once per key. If the asynchronous computation fails, the entry will be automatically removed from this cache.Warning: as with
CacheLoader.load(K),mappingFunctionmust not attempt to update any other mappings of this cache.- Parameters:
key- the key with which the specified value is to be associatedmappingFunction- the function to asynchronously compute a value, optionally using the given executor- Returns:
- the current (existing or computed) future value associated with the specified key
- Throws:
NullPointerException- if the specified key or mappingFunction is null, or if the future returned by the mappingFunction is nullRuntimeException- or Error if the mappingFunction does when constructing the future, in which case the mapping is left unestablished
-
getAll
CompletableFuture<Map<K,@NonNull V>> getAll(Iterable<? extends K> keys, Function<? super Set<? extends K>, ? extends Map<? extends K, ? extends @NonNull V>> mappingFunction) Returns the future of a map of the values associated with thekeys, creating or retrieving those values if necessary. The returned map contains entries that were already cached, combined with newly loaded entries; it will never contain null keys or values. If any of the asynchronous computations fail, those entries will be automatically removed from this cache.A single request to the
mappingFunctionis performed for all keys which are not already present in the cache. If another call toget(K, java.util.function.Function<? super K, ? extends V>)tries to load the value for a key inkeys, that thread retrieves a future that is completed by this bulk computation. Any loaded values for keys that were not specifically requested will not be returned, but will be stored in the cache. Note that multiple threads can concurrently load values for distinct keys.Note that duplicate elements in
keys, as determined byObject.equals(java.lang.Object), will be ignored.- Parameters:
keys- the keys whose associated values are to be returnedmappingFunction- the function to asynchronously compute the values- Returns:
- a future containing an unmodifiable mapping of keys to values for the specified keys in this cache
- Throws:
NullPointerException- if the specified collection is null or contains a null element, or if the future returned by the mappingFunction is nullRuntimeException- or Error if the mappingFunction does so, in which case the mapping is left unestablished
-
getAll
CompletableFuture<Map<K,@NonNull V>> getAll(Iterable<? extends K> keys, BiFunction<? super Set<? extends K>, ? super Executor, ? extends CompletableFuture<? extends Map<? extends K, ? extends @NonNull V>>> mappingFunction) Returns the future of a map of the values associated with thekeys, creating or retrieving those values if necessary. The returned map contains entries that were already cached, combined with newly loaded entries; it will never contain null keys or values. If any of the asynchronous computations fail, those entries will be automatically removed from this cache. The instances returned from themappingFunctionwill be stored directly into the cache.A single request to the
mappingFunctionis performed for all keys which are not already present in the cache. If another call toget(K, java.util.function.Function<? super K, ? extends V>)tries to load the value for a key inkeys, that thread retrieves a future that is completed by this bulk computation. Any loaded values for keys that were not specifically requested will not be returned, but will be stored in the cache. Note that multiple threads can concurrently load values for distinct keys.Note that duplicate elements in
keys, as determined byObject.equals(java.lang.Object), will be ignored.- Parameters:
keys- the keys whose associated values are to be returnedmappingFunction- the function to asynchronously compute the values, optionally using the given executor- Returns:
- a future containing an unmodifiable mapping of keys to values for the specified keys in this cache
- Throws:
NullPointerException- if the specified collection is null or contains a null element, or if the future returned by the mappingFunction is nullRuntimeException- or Error if the mappingFunction does so, in which case the mapping is left unestablished
-
put
Associatesvaluewithkeyin this cache. If the cache previously contained a value associated withkey, the old value is replaced byvalue. If the asynchronous computation fails, the entry will be automatically removed.Prefer
get(Object, Function)when using the conventional "if cached, return; otherwise create, cache, and return" pattern.- Parameters:
key- the key with which the specified value is to be associatedvalueFuture- the value to be associated with the specified key- Throws:
NullPointerException- if the specified key or value is null
-
asMap
ConcurrentMap<K,CompletableFuture<V>> asMap()Returns a view of the entries stored in this cache as a thread-safe map. Modifications made to the map directly affect the cache.A computation operation, such as
ConcurrentMap.compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>), performs the entire method invocation atomically, so the function is applied at most once per key. Some attempted update operations by other threads may be blocked while computation is in progress. The computation must not attempt to update any other mappings of this cache.Iterators from the returned map are at least weakly consistent: they are safe for concurrent use, but if the cache is modified (including by eviction) after the iterator is created, it is undefined which of the changes (if any) will be reflected in that iterator.
- Returns:
- a thread-safe view of this cache supporting all of the optional
Mapoperations
-
synchronous
Returns a view of the entries stored in this cache as a synchronousCache. A mapping is not present if the value is currently being loaded. Modifications made to the synchronous cache directly affect the asynchronous cache. If a modification is made to a mapping that is currently loading, the operation blocks until the computation completes.- Returns:
- a thread-safe synchronous view of this cache
-