Class Cache3<K1,K2,K3,V>
- Type Parameters:
K1- The first key type.K2- The second key type.K3- The third key type.V- The value type.
Overview:
This class uses ConcurrentHashMap internally to provide a thread-safe caching layer with automatic
value computation, cache eviction, and statistics tracking for three-part composite keys. It's designed for
caching expensive-to-compute or frequently-accessed objects indexed by three keys.
Features:
- Thread-safe concurrent access without external synchronization
- Three-part composite key support
- Automatic cache eviction when maximum size is reached
- Lazy computation via
Function3supplier pattern - Default supplier support for simplified access
- Built-in hit/miss statistics tracking
- Optional logging of cache statistics on JVM shutdown
- Can be disabled entirely via builder or system property
WEAK Mode Semantics:
CacheMode.WEAK on this class is best-effort, not retention-guaranteed. Each lookup synthesizes
an internal Tuple3 composite key that is never exposed to the caller, so that key is reachable only
from this cache's own backing WeakHashMap. Consequently a WEAK-mode entry becomes GC-eligible
immediately after insertion and may be reclaimed at the very next garbage collection - effectively
behaving like CacheMode.NONE once any GC has occurred. This differs from the single-key Cache,
where WEAK mode keys directly on the caller's own key and therefore retains an entry for as long as that key
remains strongly reachable elsewhere. If guaranteed retention is required, use CacheMode.FULL (the
default mode) instead of WEAK. See CacheMode.WEAK for details.
Usage:
See Also:
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidcleanup()Cleans up thread-local storage for the current thread.voidclear()Removes all entries from the cache.booleancontainsKey(K1 key1, K2 key2, K3 key3) Returnstrue if the cache contains a mapping for the specified key triplet.booleancontainsValue(V value) Returnstrue if the cache contains one or more entries with the specified value.static <K1,K2, K3, V>
Cache3.Builder<K1,K2, K3, V> create()Creates a newCache3.Builderfor constructing a cache with explicit type parameters.Retrieves a cached value by key triplet using the default supplier.Retrieves a cached value by key triplet, computing it if necessary using the provided supplier.intReturns the total number of cache hits since this cache was created.booleanisEmpty()Returnstrue if the cache contains no entries.static <K1,K2, K3, V>
Cache3.Builder<K1,K2, K3, V> Creates a newCache3.Builderfor constructing a cache.Associates the specified value with the specified key triplet.Removes the entry for the specified key triplet from the cache.intsize()Returns the number of entries in the cache.
-
Constructor Details
-
Cache3
Constructor.- Parameters:
builder- The builder containing configuration settings.
-
-
Method Details
-
create
Creates a newCache3.Builderfor constructing a cache with explicit type parameters.This variant allows you to specify the cache's generic types explicitly without passing the class objects, which is useful when working with complex parameterized types.
- Type Parameters:
K1- The first key type.K2- The second key type.K3- The third key type.V- The value type.- Returns:
- A new builder for configuring the cache.
-
of
public static <K1,K2, Cache3.Builder<K1,K3, V> K2, ofK3, V> (Class<K1> key1, Class<K2> key2, Class<K3> key3, Class<V> type) Creates a newCache3.Builderfor constructing a cache.- Type Parameters:
K1- The first key type.K2- The second key type.K3- The third key type.V- The value type.- Parameters:
key1- The first key type class (used for type safety).key2- The second key type class (used for type safety).key3- The third key type class (used for type safety).type- The value type class.- Returns:
- A new builder for configuring the cache.
-
clear
Removes all entries from the cache. -
cleanup
Cleans up thread-local storage for the current thread.This method should be called when a thread is finished using this cache to prevent memory leaks in thread pool environments where threads are reused. Only has an effect if this cache was created with thread-local mode enabled.
-
containsKey
Returnstrue if the cache contains a mapping for the specified key triplet.- Parameters:
key1- The first key. Can benull (null keys are supported like any other key).key2- The second key. Can benull (null keys are supported like any other key).key3- The third key. Can benull (null keys are supported like any other key).- Returns:
true if the cache contains the key triplet.
-
containsValue
Returnstrue if the cache contains one or more entries with the specified value.- Parameters:
value- The value to check. Can benull , in which case this method returnsfalse (the cache never storesnull values).- Returns:
true if the cache contains the value.
-
get
Retrieves a cached value by key triplet using the default supplier.- Parameters:
key1- First key component. Can benull (null keys are supported like any other key).key2- Second key component. Can benull (null keys are supported like any other key).key3- Third key component. Can benull (null keys are supported like any other key).- Returns:
- The cached or computed value. May be
null if the supplier returnsnull . - Throws:
NullPointerException- if no default supplier was configured.
-
get
Retrieves a cached value by key triplet, computing it if necessary using the provided supplier.- Parameters:
key1- First key component. Can benull (null keys are supported like any other key).key2- Second key component. Can benull (null keys are supported like any other key).key3- Third key component. Can benull (null keys are supported like any other key).supplier- The supplier to compute the value if it's not in the cache. Must not benull or anIllegalArgumentExceptionis thrown.- Returns:
- The cached or computed value. May be
null if the supplier returnsnull .
-
getCacheHits
Returns the total number of cache hits since this cache was created.- Returns:
- The total number of cache hits since creation.
-
isEmpty
Returnstrue if the cache contains no entries.- Returns:
true if the cache is empty.
-
put
Associates the specified value with the specified key triplet.- Parameters:
key1- The first key. Can benull (null keys are supported like any other key).key2- The second key. Can benull (null keys are supported like any other key).key3- The third key. Can benull (null keys are supported like any other key).value- The value to associate with the key triplet.- Returns:
- The previous value associated with the key triplet, or
null if there was no mapping.
-
remove
Removes the entry for the specified key triplet from the cache.- Parameters:
key1- The first key. Can benull (null keys are supported like any other key).key2- The second key. Can benull (null keys are supported like any other key).key3- The third key. Can benull (null keys are supported like any other key).- Returns:
- The previous value associated with the key triplet, or
null if there was no mapping.
-
size
Returns the number of entries in the cache.- Returns:
- The number of cached entries.
-