黑马程序员技术交流社区
标题:
关于懒汉式和饿汉式,都在什么时候才用到呢?
[打印本页]
作者:
陈作亮
时间:
2012-3-16 23:22
标题:
关于懒汉式和饿汉式,都在什么时候才用到呢?
他们各自的利于弊都是什么?
作者:
黑马肖凯骏
时间:
2012-3-16 23:25
单例设计模式中用到!
懒汉式会存在安全问题,如果要解决的话,需要繁琐的代码!
而饿汉式就不存在这样的问题了!
作者:
贠(yun)靖
时间:
2012-3-16 23:26
单列设计模式
单列设计模式:解决一个类在内存只存在一个对象。
想要保证对象唯一(方法一)饿汉式
1,为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
将构造函数私有化
2,为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
在类中创建一个本类对象
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
提供一个方法可以获取到该对象
当需要将事物的对象保证在内存中唯一时,就将以上三步加上即可
这就是单列设计模式
想要保证对象唯一(方法二) 懒汉式
对象是方法被调用时,才初始化,也叫做对象的延迟加载。称为懒汉式
作者:
叶绍亮
时间:
2012-3-16 23:26
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
作者:
李晓旭
时间:
2012-3-16 23:28
本帖最后由 李晓旭 于 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则会导致对对象的访问不是线程安全的
推荐使用第一种
作者:
a504079589
时间:
2012-3-17 02:24
饿汉式是线程安全的,在类创建后,加载时就会创建好一个静态的对象供系统使用,以后不在改变;
懒汉式如果在创建实例对象时不加上synchronized会导致对对象的访问不是线程安全的;
实现方式区别是: 懒汉式是延时加载, 是在需要的时候才创建对象, 而饿汉式在虚拟机启动的时候就会创建;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2