A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭军亮 中级黑马   /  2013-5-29 10:42  /  1212 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我对单例设计模式的懒汉式有一个疑问
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();也就是创建一次对象吗?这就不止一个对象了吧?

4 个回复

倒序浏览
严重怀疑哥们是真的不懂?
回复 使用道具 举报
单例是指一个类在内存中只有一个对象,getInstance()是静态的,每次生成对象都需要用类名来调用这个静态方法.    而构造函数被私有,你不可能再生成对象的
回复 使用道具 举报
你写的这个代码,安全问题已经解决了,好比第1个线程进来了,判断了为空之后就拿到锁
进去了,然后在判断是否为空,为空的话,就创建一个对象,这时候如果第二个线程进来的话,
就再判断是否为空,因为前面已经创建个对象并把对象提供出去了,那么第二个线程再判断的话
s就不为空了,所以说后面的无论谁再调用getgetInstance()方法,由于第一个判断都不满足
条件,那也就不会进去再创建对象了
回复 使用道具 举报
李阳阳 发表于 2013-5-29 14:38
你写的这个代码,安全问题已经解决了,好比第1个线程进来了,判断了为空之后就拿到锁
进去了,然后在判断是 ...

楼上正解,支持
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马