Thread local caches should only by accessed where the correct context (thread) exists. For instance, it is not recommended to set up a thread local cache in static block of code as that thread might not be the same as the thread using the cache later.
public void myMethod() {
...
Cache<String, String> threadCache = CacheManager.
getThreadLocalCacheGroup().getCache("mycache");
String value = threadCache.get("key");
if(value == null) {
// perform expensive operation to calculate value - this
// processing only happens once for each thread
...
// and store the result
threadCache.put("key", "value");
}
...
}