: if (cache == null) {
: cache = new WeakHashMap();
: }
:
: I think the initial snippet is not thread safe and might result
: in two threads initializing this cache to different objects,
: possibly conflicting with the cache accesses after that:
i believe you are write ... if Thread A evaluates the "if (cache == null)"
op and then Thread B is given priority and executes the entire method,
when Thread A resumes it will blow away the old cache instance (and all of
B's hard work)
I suspect there wasn't a synchro block arround that bit of code because
synchronizing on an expression that evaluates to null returns an NPE
: Would this be safe to initialize the cache:
:
: synchronized(this) {
: if (cache == null) {
: cache = new WeakHashMap();
: }
: }
for the life of me i can't imaging why "cache = new WeakHashMap();" isn't
just in the constructor. then it's garunteed to only execute once.
: and should the cache accesses also use synchronized(this) ?
I can't see a need for that ... then the same instance couldn't be used on
two distinct readers in parallel threads ... but that should be fine.
-Hoss
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]