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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张慈瑞 中级黑马   /  2014-7-9 22:41  /  1503 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例模式中懒汉式和饿汉式的区别?

5 个回复

倒序浏览
懒汉模式,它的特点是运行时获得对象的速度比较慢,但加载类的时候比较快。它在整个应用的生命周期只有一部分时间在占用资源。
饿汉模式,它的特点是加载类的时候比较慢,但运行时获得对象的速度比较快。它从加载到应用结束会一直占用资源。
这两种模式对于初始化较快,占用资源少的轻量级对象来说,没有多大的性能差异,选择懒汉式还是饿汉式都没有问题。但是对于初始化慢,占用资源多的重量级对象来说,就会有比较明显的差别了。所以,对重量级对象应用饿汉模式,类加载时速度慢,但运行时速度快;懒汉模式则与之相反,类加载时速度快,但运行 时第一次获得对象的速度慢。
从用户体验的角度来说,我们应该首选饿汉模式。我们愿意等待某个程序花较长的时间初始化,却不喜欢在程序运行时等待太久,给人一种反应迟钝的感觉,所以对于有重量级对象参与的单例模式,我们推荐使用饿汉模式。
回复 使用道具 举报
饿汉式:故名思议,它是在加载类的时候就会创建实例,不管这个类是不是用的找,全部创建实例,这就造成很多用                 不到的实例占用内存,并增加运行负荷,好处就是用到时,就可直接去取。
懒汉式:它是在用到对象的时候,才去创建对象,也就是常说的延迟加载;
同时:
     饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。
     懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全。
回复 使用道具 举报
饿汉式是一开始程序就创建对象,懒汉式是调用时才创建对象
回复 使用道具 举报
毕姥爷的视频都讲的很清楚了。。。和我一样是赚黑马币的来的
回复 使用道具 举报

//饿汉式:
         public class Single{
                 private static Single s = new Single();
                 private Single(){}
                 public static Single getInstance(){
                      return s;
       }
        }

//懒汉式:
        public class Single{
                 private static Single s = null;
                 public static synchronized Single getInstance(){
                            if(s==null)
                                       s = new Single();
                           return s;
                  }
        }
饿汉式: 对象预先加载,在类创建好的同时对象生成,代码简练。
懒汉式:对象延迟加载,只有在调用的时候才实例化对象。
从资源利用上讲,饿汉式不如懒汉式,因为饿汉式加载类时就会创建静态对象,占据一定内存。
但懒汉式有线程安全的问题,可以通过synchronized解决,其实synchronized加在方法上比较影响性能
,虽然可以通过双重判定解决,但代码相对饿汉式复杂不少。
因此建议选择饿汉式
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马