黑马程序员技术交流社区
标题:
有关单例模式的问题
[打印本页]
作者:
安路凤
时间:
2012-5-12 22:24
标题:
有关单例模式的问题
谁能给我说说 单例模式中懒汉式、饿汉式有什么区别??
作者:
余耀明
时间:
2012-5-12 22:29
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
第二种虽然效率好但有安全问题,最好用第二种!!
作者:
梁清平
时间:
2012-5-12 22:47
两种举例:
饿汉式:
class Single
{
private Single(){}
private static Single s = new Single();
public static Single getInstance()
{
return s;
}
}
懒汉式:
class Single
{
private Single(){}
private static Single s = null;
public static Single getInstance()
{
if(s==null)
s = new Single();l
return s;
}
}
通过上面两个程序可以看出两者不同点有:
第一,对对象的初始化时间不同。
第二,在多线程时,懒汉式需要同步并双重判断来解决不安全性。
第三,在实际开发中一般用的是饿汉式的单例模式,从效率和安全方面都比懒汉式好。
作者:
张成龙
时间:
2012-5-12 22:56
懒汉式:对象是被方法调用时才初始化,对象延时加载。多线程中存在安全隐患。
而饿汉式对象随着类的加载就加载了,多线程中不存在安全隐患
作者:
蒋映辉
时间:
2012-5-12 23:03
凤姐 那么久了你还在纠结这两个汉子。。。。
作者:
安路凤
时间:
2012-5-14 18:01
咦??我都不记得我什么时候问了个这么那啥的问题了~~~~~~~~~~~~~~~~~~~
作者:
蒋映辉
时间:
2012-5-14 18:17
安路凤 发表于 2012-5-14 18:01
咦??我都不记得我什么时候问了个这么那啥的问题了~~~~~~~~~~~~~~~~~~~
记得你不是还说毕老师讲错了么.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2