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;
r2@T.q?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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值