//恶汉式
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;
}
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章