java单例模式

来源:互联网 发布:js获取表单radio 编辑:程序博客网 时间:2024/06/06 07:13

public static DbOpenHelpergetInstance(Context context) {
if (instance == null) {
instance = new DbOpenHelper(context.getApplicationContext());
}
return instance;
}
。。。。

1.单例模式:常用,可以重复利用同一个对象,避免产生过多重复的对象。
public class  SingletonPattern {
private  SingletonPattern singletonPattern ;
private  SingletonPattern(){}
public static  SingletonPattern getInstance(){
if(this.singletonPattern == null){
this.singletonPattern = new SingletonPattern();
}
return this.singletonPattern;
}
}
我们来看红色的那一部分,假如现在有两个线程A 和线程B,线程A 执行到 this.singletonPattern =
new SingletonPattern(),正在申请内存分配,可能需要0.001 微秒,就在这0.001 微秒之内,线程B 执
行到if(this.singletonPattern == null),你说这个时候这个判断条件是true 还是false?是true,那
然后呢?线程B 也往下走,于是乎就在内存中就有两个SingletonPattern 的实例了,看看是不是出问题了?
解决方法如下:
public class SingletonPattern {
private static final SingletonPattern singletonPattern= newSingletonPattern();
//限制住不能直接产生一个实例
private SingletonPattern(){}
public synchronized static SingletonPattern getInstance(){
return singletonPattern;
}
}
看红色那部分,直接new一个对象传递给类的成员变量singletonpattern,你要的时候getInstance()直接返回给你,解决问题!
0 0