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.

Tags:

Java

Singleton