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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

他们各自的利于弊都是什么?

5 个回复

倒序浏览
单例设计模式中用到!

懒汉式会存在安全问题,如果要解决的话,需要繁琐的代码!

而饿汉式就不存在这样的问题了!
回复 使用道具 举报
单列设计模式
        单列设计模式:解决一个类在内存只存在一个对象。

想要保证对象唯一(方法一)饿汉式
1,为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
                 将构造函数私有化
2,为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
                          在类中创建一个本类对象
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
                          提供一个方法可以获取到该对象
当需要将事物的对象保证在内存中唯一时,就将以上三步加上即可
这就是单列设计模式
想要保证对象唯一(方法二) 懒汉式
        对象是方法被调用时,才初始化,也叫做对象的延迟加载。称为懒汉式

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
回复 使用道具 举报
本帖最后由 李晓旭 于 2012-3-16 23:32 编辑

饿汉式:
   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();//在方法内创建对象,多线程有可能分别跳过之前的if,判定为true,然后执行次语句
   }
   return singleton;
   }
   }  

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

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
饿汉式是线程安全的,在类创建后,加载时就会创建好一个静态的对象供系统使用,以后不在改变;
懒汉式如果在创建实例对象时不加上synchronized会导致对对象的访问不是线程安全的;
实现方式区别是: 懒汉式是延时加载, 是在需要的时候才创建对象, 而饿汉式在虚拟机启动的时候就会创建;


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