I have read The "Double-Checked Locking is Broken" Declaration. But I wonder if i create the object by a function, will that be ok?
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null)
synchronized(this) {
if (helper == null)
helper = createHelper();
}
return helper;
}
private Helper createHelper() {
return new Helper();
}
// other functions and members...
}
No it will not make a difference adding a function will not make any difference. And your function is doing nothing.
However if you declare it as
volatile
it will start working from Java 1.5One of the correct way of Lazy initialization in java is Initialization-on-demand holder idiom .This relies on the fact that inner classes are not loaded until they are referenced.