黑马程序员技术交流社区

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

作者: woshiku    时间: 2015-9-14 14:19
标题: java单例设计两种模式
//饿汉式
class Demo1{
        private final static Demo1 demo = new Demo1();
        private Demo1(){
               
        }
        public static Demo1 getInstance(){
                return demo;
        }
}
//懒汉式
class Demo2{
        private static Demo2 demo = null;
        private Demo2(){
                if(demo==null){
                        synchronized (this) {
                                if(demo==null){
                                        demo = new Demo2();
                                }
                        }
                }
        }
        public static Demo2 getInstance(){
                return demo;
        }
}


作者: 平凡的鱼    时间: 2015-9-14 16:38
刚看视频说这里  但是还是不太理解
作者: woshiku    时间: 2015-9-14 20:14
平凡的鱼 发表于 2015-9-14 16:38
刚看视频说这里  但是还是不太理解

饿汉式就是在线程访问前他已经实例化完成对于懒汉式,你要调用getInstance才以实例化,然而对多线程来说他们可能同调用getInstance,假如第一个线程已经初始化完成,那么第二,第三等等线程因为同时调用了getInstance就算第一个线程已经实例化完成,他们不知道依然对其进行了实例化,与单类设计模式不符,所以要加上同步锁,如果给getInstance方法加锁的话那么会出现一个问题,每个线程都要等到另一个线程执行完才可以调用getInstance方法,所以我们采用了先判读的方法,每个线程都可以进行先判读,假如被实例化都返回实例没有则实例化,实例化部分要加上同步锁,以防其它线程一起实例化,如果一个线程实例化成功,其它线程便可获得getInstance对象





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