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.5
private volatile Helper helper = null;
One 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.
class Foo {
private static class HelperHolder {
public static Helper helper = new Helper();
}
public static Helper getHelper() {
return HelperHolder.helper;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With