黑马程序员技术交流社区

标题: 在单例设计模式为什么大多采用饿汉式而不是懒汉式? [打印本页]

作者: 1961993790    时间: 2013-10-23 17:06
标题: 在单例设计模式为什么大多采用饿汉式而不是懒汉式?
本帖最后由 1961993790 于 2013-10-25 08:58 编辑

这有什么不同呢?懒汉式这样可以更好的节约内存空间啊。

作者: 周志龙    时间: 2013-10-23 17:08
懒汉式线程不安全
作者: 完美恋爱    时间: 2013-10-23 17:20
饿汉式和懒汉式的区别:
                饿汉式是类一加载进内存就创建好了对象;
                懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,对象才开始创建。
                懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题
                可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,所以可以加双重判断来提高程序效率。
开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题
作者: 枫儿    时间: 2013-10-23 18:52
为了安全着想~~~
作者: HM代景康    时间: 2013-10-23 19:12
饿汉式:
        public class Singleton{
            private static Singleton singleton = new Singleton ();
            private Singleton (){}
            public Singleton getInstance(){return singletion;}
       }

     懒汉式:
       public class Singleton{
            private static Singleton singleton = null;
            public static synchronized synchronized getInstance(){
                 if(singleton==null){
                     singleton = new Singleton();
                 }
                return singleton;
            }
       }

     比较:
         饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
          懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
          推荐使用第一种

作者: HM代景康    时间: 2013-10-23 21:25
djkyqkzj 发表于 2013-10-23 19:12
饿汉式:
        public class Singleton{
            private static Singleton singleton = new Single ...

下次注意了
作者: Jim-剣◆﹏    时间: 2013-10-24 00:36
我的理解是,在两种方法都能达到目的的情况下,用饿汉式避免了安全问题,而且这也不需要什么大的代码量,懒汉式加锁会变得复杂,程序运行时间会增加
作者: 乔兵    时间: 2013-10-25 08:18
楼主你好,如果问题已解决请将帖子状态修改为提问结束,

如果未解决请继续提问,谢谢合作

修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
作者: 乔兵    时间: 2013-10-25 08:19
楼主你好,如果问题已解决请将帖子状态修改为提问结束,

如果未解决请继续提问,谢谢合作

修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




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