我在 Web Application 中有这个 Singleton 类。
public class MyDAO
{
private static MyDAO instance;
private MyDAO() {
}
public static MyDAO getInstance() {
if (instance == null) {
instance = new MyDAO();
}
return instance;
}
我将通过这种方式访问它
public void get_Data()
{
MyDAO dao = MyDAO.getInstance();
}
如果有 3 个用户访问应用程序,将创建多少个 MyDAO 类的对象?
每个用户会有一个 MyDAO 实例吗?
您必须同步对getInstance()
。否则,某些线程可能会看到未完全初始化的版本。
更多关于单例模式 http://en.wikipedia.org/wiki/Singleton_pattern
同步后,该实例中将只有一个实例JVM
。无论有多少变量引用该对象。但如果您运行 N 个服务器,则每个服务器中都会有一个实例JVM
。所以总共有N个实例。
您可以仔细检查您是否正在使用Java 5.0
或更旧:
private static volatile MyDAO();
public synchronized static MyDAO getInstance() {
if (instance == null) {
instance = new MyDAO();
}
return instance;
但是,如果您的应用程序始终需要一个实例,您可以急切地实例化它:
private static MyDAO = new MyDAO();
但我会选择Bill Purge
解决方案:
private static class MyDAOHolder {
public static final MyDAO INSTANCE = new MyDAO();
}
public static MyDAO getInstance() {
return MyDAOHolder.INSTANCE;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)