黑马程序员技术交流社区

标题: 单例设计模式 [打印本页]

作者: 郭军亮    时间: 2013-5-29 10:42
标题: 单例设计模式
我对单例设计模式的懒汉式有一个疑问
class Single
{
        private static Single s = null;
        private Single(){}
        public static Single getInstance()
        {
                if(s==null)
                {
                        synchronized(Single.class)
                        {                                
                                if(s==null)
                                        s = new Single();
                        }
                }
                return s;
        }
}
这样的话,岂不是每次调用getInstance()这个方法,就会执行一次s = new Single();也就是创建一次对象吗?这就不止一个对象了吧?
作者: 神之梦    时间: 2013-5-29 10:58
严重怀疑哥们是真的不懂?
作者: 刘勇强    时间: 2013-5-29 11:07
单例是指一个类在内存中只有一个对象,getInstance()是静态的,每次生成对象都需要用类名来调用这个静态方法.    而构造函数被私有,你不可能再生成对象的
作者: 李阳阳    时间: 2013-5-29 14:38
你写的这个代码,安全问题已经解决了,好比第1个线程进来了,判断了为空之后就拿到锁
进去了,然后在判断是否为空,为空的话,就创建一个对象,这时候如果第二个线程进来的话,
就再判断是否为空,因为前面已经创建个对象并把对象提供出去了,那么第二个线程再判断的话
s就不为空了,所以说后面的无论谁再调用getgetInstance()方法,由于第一个判断都不满足
条件,那也就不会进去再创建对象了

作者: 黑马-许鹏    时间: 2013-5-29 15:51
李阳阳 发表于 2013-5-29 14:38
你写的这个代码,安全问题已经解决了,好比第1个线程进来了,判断了为空之后就拿到锁
进去了,然后在判断是 ...

楼上正解,支持




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2