继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

单例模式

一只名叫tom的猫
关注TA
已关注
手记 500
粉丝 62
获赞 330

//恶汉式

class Single

{

private Single(){}

private static final Single s=new Single();

public static Single getInstance(){

return s;

}

}

//懒汉式

class Single2

{

//第一步:创建一个私有的构造方法,使外界无法调用

private Single(){}

//volatile  一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就    //具备了两层语义:

//1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这//新值对其他线程来说是立即可见的。

//2)禁止进行指令重排序。

//第二步:创建一个私有的静态的本类对象,供外界使用,但不能直接调用

private static volatile Single s=null;

//第三步:为外界提供获得本类唯一对象的静态方法

public static Single getInstance(){

if(s==null){

                       //当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时  //间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

synchronized(Single.class){

if(s==null){

s=new Single();

}

}

}

return s;

}

}

demo:

class UserInfoBean {

   private String userid;

   private String token;

   private String username;

   private UserInfoBean(){

   }

   private static  volatile  UserInfoBean userInfoBean=null;

   public static UserInfoBean getInstance(){

       if(userInfoBean==null){

           synchronized (UserInfoBean.class){

               if(userInfoBean==null){

                   userInfoBean=new UserInfoBean();

               }

           }

       }

       return userInfoBean;

   }

   public String getUserid() {

       return userid;

   }

   public void setUserid(String userid) {

       this.userid = userid;

   }

   public String getToken() {

       return token;

   }

   public void setToken(String token) {

       this.token = token;

   }

   public String getUsername() {

       return username;

   }

   public void setUsername(String username) {

       this.username = username;

   }

}

原文链接:http://www.apkbus.com/blog-160625-68362.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP