您的位置:首页 > 编程语言 > Java开发

java单例模式

2015-08-02 15:42 435 查看
public static DbOpenHelper
getInstance(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()直接返回给你,解决问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: