[concurrency-interest] synchronized on construction

Pete Soper Pete.Soper at Sun.COM
Wed May 24 09:43:55 EDT 2006


Thomas Hawtin wrote:
> Jeremy Manson wrote:
> 
>>Jason Mehrens wrote:
>>
>>>Browsing over the java.util.Vector class I noticed that in the constructors, 
>>>the initial writes to the internal data members (non-final and non-volatile) 
>>>are not performed under a synchronized block.   The same is true for when a 
> 
> 
> Under the new JMM would a synchronised block in the constructor 
> guarantee to fix the problem? Does the racy write of the Vector 
> reference, outside of the synchronised block, necessarily come after the 
> block itself. Could it technically be moved up before the lock is 
> acquired? Or am I misinterpreting something?
> 
> 
>>>Vector is deserialized.  Where does happens-before edge occur so that other 
>>>threads don't see uninitialized values of the internals?  The only happens 
>>>before-edges I can think of are during handoff between threads or on the 
>>>call to Thread.start().  Is how this class conforms to the JMM or is 
>>>something else going on?
>>>
>>
>>Well, bear in mind that only one thread has access to instances of these 
>>classes during construction.  JMM problems only come up here if you pass 
>>a reference to the object to another thread via a data race.  These 
>>classes are not designed to work correctly if you do that - only the 
>>immutable ones, like String, really are.
>>
>>If you are using this class, it is therefore imperative to provide 
>>proper synchronization during a handoff.
> 
> 
> Bug 6379897 deals with the thread safety of Random's seed when 
> constructed lazily in Collections. It's interested to see that the fix 
> for that attempts to make the use of seed thread-safe, rather than 
> construct the Random safely in Collections. Presumably the details of 
> that fix (setting of the seed value) require that my first paragraph is 
> wrong...
> 
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6379897

There is a special guarantee extended to final fields related to 
construction that the experts can explain better than me. And as far as 
I can tell there is no possibility of "this" being published before the 
constructor completes. So this (current Mustang source for) Random looks 
looks OK and I think the attempt was successful.

-Pete

> 
> Tom Hawtin
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at altair.cs.oswego.edu
> http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest
> 



More information about the Concurrency-interest mailing list