1.单例模式
1.1.恶汉
public class Singleton {
// 私有构造器
private Singleton() {
}
private static final Singleton INSTANCE = new Singleton();
public static Singleton getInstance() {
return INSTANCE;
}
}
提前创建好对象
优点:实现简单,没有多线程同步问题
缺点:不管有没使用,instance对象一直占着这段内存
1.2.懒汉
public class Singleton2 {
// 私有化构造器
private Singleton2() {
}
// volatile 解决指令重拍问题???这两需要了解什么是指令重排
private static volatile Singleton2 INSTANCE;
public static Singleton2 getInstance() {
if (INSTANCE == null) {
synchronized (Singleton2.class) {
if (INSTANCE == null) {
INSTANCE = new Singleton2();
}
}
}
return INSTANCE;
}
}
实现比较复杂,涉及知识点比较多,有锁的问题,双重验证问题、还有指令重排的问题。
源码:https://gitee.com/zzisme/DesignPatterns/
下一篇:工厂模式之简单工厂.