先看了个常见的单例模式,刚接触设计模式买了本大话设计模式,讲到单例模式时关于多线程,用了双重检查锁DCL,不过在兽王的博客里对其否定了,来看看兽王是怎么讲解的吧。
[url=http://rjx2008.iteye.com/blog/342474#comments]不容易掌握的单例模式[/url]
小知识:单例模式有两种,饱汉、饿汉。顾名思义饿汉是饥不择食,强行创建,而饱汉则会挑挑食。
//饿汉式
Class A{
private static A a=new A();
private A(){}
public A getA(){
return a;
}
}
//饱汉式
class B{
private static B b;
private B(){}
public B getB(){
if(b!=null){
return b;
}else{
b=new B();
retrun b;
}
}
}
兽王对多线程情况下单例迷失应用的处理是:
public class Singleton {
private Singleton(){
}
//静态内部类
static class SingletonInner{
static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonInner.instance;
}
}
原因:使用静态内部类!它是由一个叫Bob Lee的人写下来的(最初忘记了是哪两个人提出)。在加载singleton时并不加载它的内部类SingletonInner,而在调用 getInstance()时调用SingletonInner时才加载SingletonInner,从而调用singleton的构造函数,实例化 singleton,从而在不需要同步的情况下,达到延迟初始化的效果。
文中的内容均是兽王Rjx2008的出品,[url=http://rjx2008.iteye.com/blog/340083]链接[/url]