Alastair Rodgers wrote: > The various static methods which return the singleton PeriodType > instances (e.g. months(), years(), etc.) all use lazy initialization to > set the underlying static field values on first use. However, they just > use a simple guard against null to check for first use, e.g. > > public static PeriodType months() { > PeriodType type = cMonths; > if (type == null) { > type = new PeriodType( ... ); > cMonths = type; > } > return type; > } > > Two threads could simultaneously call the method, both could see (type > == null) and attempt to initialise the static field. Assigning a field > value to an object reference is not guaranteed to be atomic, so I think > there's a small chance of it causing problems.
Firstly, as I understand it, assigning an object reference to a variable is atomic. More significantly however is that it doesn't matter if two PeriodType objects get created - the second one will simply overwrite the first in the static variable of PeriodType. The effect will be that the first one created will typically just be a short--lived object as seen by the caller of the method that created it. As such, it is important to compare two PeriodType objects using .equals(), not using ==. > Wouldn't it be safer to just initialise all the static fields in a > static initializer block, which is guaranteed to be called just once? > You'd lose the lazy initialization, but that's perhaps not such a big > deal. One of the issues with the current java datetime libraries is excessive synchronization. We did our best to avoid it wherever possible. Stephen ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Joda-interest mailing list Joda-interest@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/joda-interest