黑马程序员技术交流社区

标题: 毕老师的单例代码总结及分析总结(这段真的好精彩~) [打印本页]

作者: zcbcba123    时间: 2015-12-16 21:48
标题: 毕老师的单例代码总结及分析总结(这段真的好精彩~)
/*单例模式*/
//饿汉式
class Single{
        private static final Single s=new Single();
        private Single(){}
        public static Single getInstance(){
                return s;
        }
}


分析:之所以s加了final,这样更严谨,由于初始化成员变量时就new了实例化对象,所以称为饿汉式。


//懒汉式
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();
                                }
                        }
                }
        }
}

分析:由于一开始s为空,所以称为懒汉式。第一次s为空进入if,后进入同步代码块。如果发现此时再进来一个线程,那么由于有Single.class作为锁,那么此时第一次进来的线程不结束,第二次的是进不来同步代码块的。
那么第一次的结束同步代码块后释放执行权,第二次进来卡到同步的那个线程则进入里面。结果此时s已经有了实例化对象,所以s!=null,所以不会往里走实例化了。
然后如果此时又来了新的线程,那么外面的s==null就可以阻止了,因为s已经被实例化了。






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