On 22 Dec 2015, at 17:14, Chris Hegarty <[email protected]> wrote:

> On 22 Dec 2015, at 16:13, Claes Redestad <[email protected]> wrote:
> 
>> Hi,
>> 
>> please review this patch to clean up and remove volatile from a number of 
>> lazily initialized fields in java.net.URI.
> 
> So ‘string’ is the only remaining volatile field. Is there any specific 
> reason for this?
> 
>> This is safe as long as the fields are always accessed through their 
>> accessors and the accessors return the local result of the calculation.
> 
> Ok, I see the pattern that you are using.
> 
>> Since initialization was done with no synchronization, there was never any 
>> guarantee that different Strings couldn't escape from concurrent calls to 
>> these getters. So even if this becomes more likely by dropping volatile, 
>> this should be of no real consequence.
> 
> Right. This all seems a little fragile, but no worse than before your changes,
> and I get why some of these fields are “lazy”.
> 
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8145862
>> Webrev: http://cr.openjdk.java.net/~redestad/8145862/webrev.01
> 
> I’m ok with these changes.
> 
> I notice that the public javadoc has "Instances of this class are immutable”. 
> I wonder
> if the fields, that are no longer volatile, deserve a comment explaining that 
> their 
> initialization is racy?

Sorry, I mean: “… is safe in the face of multiple threads racing to initialize 
them”.

-Chris.

> -Chris.
> 
>> Thanks!
>> 
>> /Claes
> 

Reply via email to