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 >
