黑马程序员技术交流社区
标题:
【资源分享】关于单例模式饿汉式与懒汉式的总结
[打印本页]
作者:
fxwb2005
时间:
2014-8-5 10:43
标题:
【资源分享】关于单例模式饿汉式与懒汉式的总结
本帖最后由 fxwb2005 于 2014-8-5 11:33 编辑
之前也看论坛里有童鞋提出这两者的特点和区别,而且懒汉式在面试中也经常会考到,看完视频总结了一下,希望对不知道的童鞋有所帮助。
首先是饿汉式:
class Single
{
private static final Single s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
复制代码
创建静态对象时final加不加无所谓,但老毕说加上更严谨那就加上吧,饿汉式是比较常用的单例模式。
接下来是懒汉式:
class Single {
private ststic Single s=null;
private Single(){}
public ststic Single getInstance()
{
if(s==null){
synchronized(Single.class){
if(s==null)
{
s=new Single();
return s;
}
}
}
}
}
复制代码
懒汉式的特点是使用了延迟加载,饿汉式在类创建时就创建好了对象,但懒汉式只是声明了对象,在调用的时候才会创建对象实例,这样可以节省一些资源,但是懒汉式在多线程访问时会发生安全问题,有可能会创建出多个对象,这样就违背了单例模式的初衷,所以需要使用同步方法或者同步代码块来解决这个问题,但如果使用同步方法的话,每个线程进来都要判断一次锁,会对效率有一些影响,所以可以使用双重if判断和同步代码块来提高效率。
提示:懒汉模式在声明对象时不可以加final,否则下面无法创建对象实例,因为单例模式使用的是静态方法,所以同步使用的锁不是this,而是该类所属的字节码文件对象。也就是:类名.class。
作者:
王洪涛
时间:
2014-8-5 15:50
谢谢 很好
作者:
.Mч┞尛__洋
时间:
2014-8-5 20:52
挺好的
作者:
文盲庄稼汉
时间:
2014-8-5 20:55
面试都是懒汉式。大家都搞清楚
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2