Java : Singleton class instances in a Web based Application
You must synchronize the access to the getInstance()
. Otherwise some threads might see a not fully initialized version.
More on the Singleton Pattern
Once you synchronize it there will only be one instance in the JVM
. No matter how many variables references to the object. But if you are running N servers there will be one instance in each JVM
. So N instances in total.
You can double check if you are using Java 5.0
or older:
private static volatile MyDAO();
public synchronized static MyDAO getInstance() {
if (instance == null) {
instance = new MyDAO();
}
return instance;
But if your application always needs an instance you can eagerly instantiate it:
private static MyDAO = new MyDAO();
But I would go for the Bill Purge
solution:
private static class MyDAOHolder {
public static final MyDAO INSTANCE = new MyDAO();
}
public static MyDAO getInstance() {
return MyDAOHolder.INSTANCE;
}
No, it's one per JVM. Be careful about thread safety.
I'd read "Effective Java" and follow the recommendations for how to write a singleton properly. Yours isn't it.