黑马程序员技术交流社区
标题:
关于单例模式的懒汉式与饿汉式
[打印本页]
作者:
刘志祥
时间:
2011-12-6 21:40
标题:
关于单例模式的懒汉式与饿汉式
本帖最后由 刘志祥 于 2011-12-7 14:08 编辑
这两个模式究竟该怎么理解,请高手赐教!最好能形象点。。。谢谢!
作者:
fly51888
时间:
2011-12-6 21:46
本帖最后由 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-6 21:51
本帖最后由 benbenqi 于 2011-12-6 22:36 编辑
懒汉式:对象是方法被调用时,才初始化,也叫做对象的延时加载
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance {
if (s==null)
s = new Single();
return s;
}
}
复制代码
Single类进内存,对象还没有存在,只有调用getInstance方法时,才创建对象
饿汉式:不管你对象是否调用,先初始化对象
class Single
{
private Single(){}
private static Single s = new Single();
public static Single getInstance()
{
return s;
}
}
复制代码
Single类一进内存,就已经创建好了对象
一般采用饿汉式,懒汉式要解决同步问题,需要加锁
可以这么理解:懒汉式:这个对象比较懒,特懒散,只要你不用它,它就不动。一直等到调用该对象所在方法时,才去创建对象
饿汉式:这个对象饿得要死,简直是一个饿死鬼,只要该对象所在类一加载到内存,对象就创建好了,恐怕自己被饿死。
作者:
武超
时间:
2011-12-6 22:36
这两种都是单例设计模式
懒汉式也叫做对象的延时加载,方法被调用时,对象才初始化。
饿汉式不管你对象是否调用,都要先对对象进行初始化。
作者:
应国炎
时间:
2011-12-7 13:57
解释:
饿汉式:不管用不用,都开辟内存空间 优点:避免死锁 缺点:浪费内存空间
懒汉式:用的时候才开辟内存空间 优点:节省内存空间 缺点:可能会死锁
1 其实两个方法都可以使用
2 如果内存够大,推荐用饿汉式
3 两者使用内存方式不用,涉及到了线程的问题. 因为懒汉式有可能会引起死锁,所以一般都推荐用饿汉式
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2