单例模式属于创建型模式,⼀个单例类在任何情况下都只存在⼀个实例,
构造⽅法必须是私有的、由⾃⼰创建⼀个静态变量存储实例,对外提供⼀
个静态公有⽅法获取实例。
public class LazySingleton {
//volatile防止指令重排序
private static volatile LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
//第一次检查,确保不必要的同步
if (instance == null) {
synchronized (LazySingleton.class) {
//第二次检查,确保只有一个线程创建实例
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
synchronized
加锁 为提高性能,处理器可能对代码执行顺序重新排序,如果运行顺序为1 3 2
,当引用变量指向内存空间时,这个对象不为null,但是还没初始化,其他线程在调用getInstance
方法使用时,会判断instance
不为null,导致错误使用,出现异常
在类加载阶段就创建实例了
public class EagerSingleton {
private final static EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
有关创建型设计模式的内容就更新到这了,下一篇更新结构型设计模式的内容
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。