singleon模式与多线程

单子模式的设计思想是类得内部定义一个静态变量,当创建第一个实例时设置改变量. /_%>F5  
应用程序直接使用这个静态变量指向的实例就可以了.为了防止应用程序调用构造器 _NhaW8E-  
所以构造器必须为private cTc|Y@@  
创建一个类满足: CB%[2i+  
1.构造器私有 WY:S(aH  
2.用一个私有静态变量引用实例 Yq0/nN{g6  
3.提供一个共有,静态方法获得实例. 1sP^1CT}9n  
Aa]0IY'7jp  
静态 是为了在类加载时创建了 所需对象 Dd~'5tm:Z  
而不用类创建对象. [)v |  
------------------------------------------------------------------------------------------- 9Tn/yK5#K  

Single.java

class Single N[P_y}ar  
{ cnH9X)  
     private static Single s; r[email protected]?d  
:-7q1c)s  
     private Single()            //构造器定义为private Hfy2up(nl)  
     { fruQj{{ <  
     } PK=STyz)  
     public static synchonized Single getInstance() kOJOp  
     { /g'axPx T0  
           if (s==null) ;)aYlq:  
                 s = new Single(); I< .)iOP  
           return s; d=[/R@Nj  
     } xs;n.=  
}; q.$VrCc  

 

 Single2.javav  
class Single2 /!;i>#K  
{ 5E?}nw&$  
     private static Single2 s = new Single2();      //类加载时执行一次 s)~eVf  
     private Single2()            //构造器定义为private c^li]RUm  
     { 0z]o0= {  
     } YDs1}Lw-  
     public static Single2 getInstance() :HGY^W798  
     { y[QUj "aC  
           return s; &$^>u S9  
     } 5(UBv3z-  
};


 /./如果有多个classloader,单子就可能不是单子了!!!

 

class Single3 {
    private static s ;
    private Single3(){
           
    }
    public static s getInstance(){
        if(s==null){
             synchonized(Single3.class){
          if(s==null){
                  s = new Single3();
                 }
             }
        }
    } 

}

单子不可以继承,因为它的构造器是private!

你可能感兴趣的:(多线程,c,ClassLoader,null,Class,UP)