As an aid to my understanding of Roberts code fragment, where,
GlobalSettings.ALLOW_UNSYNCHRONIZED_READ == true
is,
class Foo {
private Helper helper = null;
private boolean helperExists;
public Helper getHelper() {
if (!helperExists)
synchronized(this) {
if (helper == null)
helper = new Helper();
else
helperExists =
GlobalSettings.ALLOW_UNSYNCHRONIZED_READ;
}
return helper;
}
// other functions and members...
}
more or less equivalent to,
class Foo
{
private final static int HELPER_DOESNT_EXIST = 0;
private final static int HELPER_MIGHT_EXIST = 1;
private final static int HELPER_EXISTS = 2;
private int state = HELPER_DOESNT_EXIST;
private Helper = null;
public Helper getHelper()
{
switch(state)
{
case HELPER_DOESNT_EXIST:
{
synchronized(this)
{
if(helper == null)
helper = new Helper();
state = HELPER_MIGHT_EXIST;
}
// Drop through ...
}
case HELPER_MIGHT_EXIST:
{
synchronized(this)
{
state = HELPER_EXISTS;
}
// Drop through ...
}
case HELPER_EXISTS:
{
return helper;
}
}
}
}
ie., we have a pair of sync blocks in sequence acting as a
barrier?
Cheers,
Miles
-- Miles Sabin InterX Internet Systems Architect 5/6 Glenthorne Mews +44 (0)20 8817 4030 London, W6 0LJ, England msabin@interx.com http://www.interx.com/------------------------------- JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:29 EDT