单例模式
1.饿汉式单例
代码如下
public class SingleObject {
static SingleObject instance = new SingleObject();
private SingleObject(){}
public static SingleObject getInstance(){
return instance;
}
}
优点:执行效率高 无锁 代码简单
缺点:内存浪费
2.懒汉式单例
为了解决懒汉式单例 内存浪费问题,我们优化了思路在需要使用对象时候调用getInstance创建对象,代码如下。
public class Singleton {
static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
但是如上代码又存在线程安全问题,多线程下同时执行 if (instance == null)可能同时为true,导致单例对象创建多次,这使得原本单例的对象变成了多例。
优点:解决了饿汉单例的内存浪费问题
缺点:多线程下存在对象不安全问题
3.double check 懒汉式单例
为了解决懒汉式单例存在多线程安全问题,我们优化了思路,在if (instance == null) 加锁处理,代码如下