单例设计模式(Singleton)的优化
单例模式的优化
单例模式懒汉式写法,单例模式的优化有以下四个方面:
- 使用同步保证线程安全synchronized
- 使用volatile关键字:volatile关键字提醒编译器后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
- 防止反射调用私有构造方法
- 让单例序列化安全
代码实现
import java.io.Serializable;
public class Singleton implements Serializable {
//加上volatile关键字保证变量的一致性
private volatile static Singleton singleton = null;
private Singleton() {
if (singleton != null) {
throw new RuntimeException("此类为单例模式,已经被实例化");
}
}
public static Singleton getInstance() {
//外层判断是防止已经new过了
if (singleton == null) {
//加上synchronized关键字,保证线程安全
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}