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()直接返回给你,解决问题!
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()直接返回给你,解决问题!
相关文章推荐
- 编写struts.xml时的提示问题
- java 集合类结构图 List Set Map 对比
- java--获取当前时间(Calendar类)
- 用JavaDBF操作(读、写)DBF文件
- JavaWeb 文件上传
- java的反射性能测试
- JAVA学习第十二天
- java并发编程中CountDownLatch和CyclicBarrier的使用
- Tarena - Java开发环境
- JavaWeb 全站乱码过滤
- Spring MVC JSON数据交互-解析和返回JSON
- JAVA入门基础文章3-类的概念-什么是继承
- java中,数值型Double运算出错问题
- 简单的struts2案例
- Java比较String ==和equals() 解析
- JNI中 Java 中字符串 转换成C中的字符数组方法
- spring配置文件详解
- Web Service学习-CXF与Spring整合为JavaEE应用发布WebService(三)
- Java:注解(Annotation)自定义注解入门
- @interface java注解