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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刘志祥

黑马帝

  • 黑马币:0

  • 帖子:35

  • 精华:0

© 刘志祥 黑马帝   /  2011-12-6 21:40  /  2373 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘志祥 于 2011-12-7 14:08 编辑

这两个模式究竟该怎么理解,请高手赐教!最好能形象点。。。谢谢!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 fly51888 于 2011-12-6 21:49 编辑

饿汉式:
  public class  App{
  private static App app = new App();
  private App(){}
  public App  getInstance(){return app;}
  }  

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

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

点评

谢谢。  发表于 2011-12-7 14:06

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
本帖最后由 benbenqi 于 2011-12-6 22:36 编辑

懒汉式:对象是方法被调用时,才初始化,也叫做对象的延时加载
  1. class Single
  2. {
  3.         private static Single s = null;
  4.         private Single(){}
  5.         public static Single getInstance        {
  6.                
  7.                 if (s==null)
  8.                         s = new Single();
  9.                 return s;
  10.         }
  11. }
复制代码
Single类进内存,对象还没有存在,只有调用getInstance方法时,才创建对象

饿汉式:不管你对象是否调用,先初始化对象
  1. class Single
  2. {
  3.         private Single(){}
  4.         private static Single s = new Single();
  5.         public static Single getInstance()
  6.         {
  7.                 return s;
  8.         }
  9. }
复制代码
Single类一进内存,就已经创建好了对象

一般采用饿汉式,懒汉式要解决同步问题,需要加锁

可以这么理解:懒汉式:这个对象比较懒,特懒散,只要你不用它,它就不动。一直等到调用该对象所在方法时,才去创建对象
饿汉式:这个对象饿得要死,简直是一个饿死鬼,只要该对象所在类一加载到内存,对象就创建好了,恐怕自己被饿死。

点评

谢谢。  发表于 2011-12-7 14:07

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
这两种都是单例设计模式
懒汉式也叫做对象的延时加载,方法被调用时,对象才初始化。
饿汉式不管你对象是否调用,都要先对对象进行初始化。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
解释:
饿汉式:不管用不用,都开辟内存空间   优点:避免死锁  缺点:浪费内存空间
懒汉式:用的时候才开辟内存空间     优点:节省内存空间 缺点:可能会死锁

1 其实两个方法都可以使用
2 如果内存够大,推荐用饿汉式
3 两者使用内存方式不用,涉及到了线程的问题. 因为懒汉式有可能会引起死锁,所以一般都推荐用饿汉式

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马