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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© woshiku 中级黑马   /  2015-9-14 14:19  /  337 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//饿汉式
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;
        }
}

2 个回复

倒序浏览
刚看视频说这里  但是还是不太理解
回复 使用道具 举报
平凡的鱼 发表于 2015-9-14 16:38
刚看视频说这里  但是还是不太理解

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