Class PerThreadCache
- All Implemented Interfaces:
- AutoCloseable
ThreadLocal in the serving thread.
 This class is intended to cache objects that have a high instantiation cost, are specific to the current request and potentially need to be instantiated multiple times while serving a request.
This is different from the key-value storage in CurrentUser: CurrentUser
 offers a key-value storage by providing thread-safe get and put methods. Once the
 value is retrieved through get there is not thread-safety anymore - apart from the
 retrieved object guarantees. Depending on the implementation of CurrentUser, it might be
 shared between the request serving thread as well as sub- or background treads.
 
In comparison to that, this class guarantees thread safety even on non-thread-safe objects as its cache is tied to the serving thread only. While allowing to cache non-thread-safe objects, it has the downside of not sharing any objects with background threads or executors.
Lastly, this class offers a cache, that requires callers to also provide a Supplier in
 case the object is not present in the cache, while CurrentUser provides a storage where
 just retrieving stored values is a valid operation.
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic final classUnique key for key-value mappings stored in PerThreadCache.
- 
Method SummaryModifier and TypeMethodDescriptionvoidclose()static PerThreadCachecreate()static PerThreadCacheget()<T> Tget(PerThreadCache.Key<T> key, Supplier<T> loader) Returns an instance ofTthat was either loaded from the cache or obtained from the providedSupplier.static <T> TgetOrCompute(PerThreadCache.Key<T> key, Supplier<T> loader) 
- 
Method Details- 
create
- 
get
- 
getOrCompute
- 
getReturns an instance ofTthat was either loaded from the cache or obtained from the providedSupplier.
- 
closepublic void close()- Specified by:
- closein interface- AutoCloseable
 
 
-