On Fri, May 28, 2010 at 8:21 PM, Paul Cowan <co...@aconex.com> wrote: > Changing this class to use ConcurrentHashMap, and completely removing > synchronization, won't work, as it's written. The lazy-loading in > regionCachePreFetchEnabled() (get - if null, put) won't work correctly with > a ConcurrentHashMap without external synchronization.
I'm not sure to understand why, can you explain? > 1) Replace with a ConcurrentHashMap, and change regionCachePreFetchEnabled() > to do something like: > prefetchRegionCacheEnabled.putIfAbsent(tableName, true); > return prefetchRegionCacheEnabled.get(tableName); Slide 31 of the aforementioned presentation reads "Calls putIfAbsent every time it needs to read a value" "Unfortunately, this usage is very common" so I think this is not a good idea. I'm still fairly new to Java so I tend to trust what people like Joshua Bloch write, but I can be convinced otherwise :) -- Benoit "tsuna" Sigoure Software Engineer @ www.StumbleUpon.com