Java:基于Web的应用程序中的Singleton类实例

Paw*_*wan 7 java singleton

我在Web应用程序中有这个Singleton类.

public class MyDAO 
 {


    private static MyDAO instance;

    private MyDAO() {
    }

    public static MyDAO getInstance() {
        if (instance == null) {
            instance = new MyDAO();
        }
        return instance;
    }
Run Code Online (Sandbox Code Playgroud)

我会这样访问它

public void get_Data()
{

        MyDAO dao = MyDAO.getInstance();
}
Run Code Online (Sandbox Code Playgroud)

如果有3个用户访问应用程序,将创建多少个MyDAO类对象?

每个用户会有一个MyDAO实例吗?

sse*_*ano 5

您必须同步访问getInstance().否则某些线程可能会看到未完全初始化的版本.

有关Singleton Patter的更多信息

一旦你同步它将只有一个实例JVM.无论有多少变量引用该对象.但是如果你运行N个服务器,每个服务器中都会有一个实例JVM.总共N个实例.

您可以仔细检查您是否正在使用Java 5.0或更旧:

private static volatile MyDAO();
 public synchronized static MyDAO getInstance() {
    if (instance == null) {
        instance = new MyDAO();
    }
    return instance;
Run Code Online (Sandbox Code Playgroud)

但是如果你的应用程序总是需要一个实例,你可以急切地实例化它:

private static MyDAO = new MyDAO();
Run Code Online (Sandbox Code Playgroud)

但我会寻求Bill Purge解决方案:

    private static class MyDAOHolder { 
            public static final MyDAO INSTANCE = new MyDAO();
    }

    public static MyDAO getInstance() {
            return MyDAOHolder.INSTANCE;
    }
Run Code Online (Sandbox Code Playgroud)