At 5:01 PM -0700 6/12/01, Kammy Wesley wrote:
>Kammy Wesley wrote:
>>
>> Hello all:
>>
>> I have read the article on "Double Checked Locking is Broken", and I
>> have a question. If the constructor for my singleton throws an
>> exception, do I have any other choice besides the synchronized
>> "getHelper" method for correctly instantiating my singleton?
>>
>> It doesn't seem that I can use the "create another class to hold the
>> singleton method" as referred to near the end of the article, right?
>>
>> http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
>>
>> thanks,
>>
> > Kammy
Sure you can. Just use a static code block to initialize it:
class Singleton {
static final Helper h;
static {
Helper tmp = null;
try {
tmp = new Helper();
}
catch (FooException f) {
}
h = tmp;
}
}
(By the way, I had to check if the system allows static blank finals
(e.g., final static fields assigned in a static code block; javac
seems happy with it, although I didn't check the specification).
Bill
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:32 EDT