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
[email protected]
https://lists.sourceforge.net/lists/listinfo/joda-interest