单例模式主要有 饿汉式单例、懒汉式单例
1.饿汉式单例
即类初始化的时候就会创建,这个是线程安全的
/**
* @description :TODO
* since:2023/2/6 8:21 PM
* author :
*/
public class HungarySigleton {
private static final HungarySigleton hungarySigleton = new HungarySigleton();
/**
* 重写无参数构造方法
*/
private HungarySigleton (){}
public static HungarySigleton getInstance(){
return hungarySigleton;
}
}
2.懒汉式单例模式
我们看看最初级的懒汉式单例
public class Singleton {
private Singleton() {}
//线程不安全
private static Singleton single=null;
public static Singleton getInstance() {
if (single == null) {
//线程不安全
single = new Singleton();
}
return single;
}
}
所以我们改进出饿汉模式的另一种写法 双重检查模式
public class Singleton {
private Singleton() {} //重写构造方法
private static volatile Singleton single=null; //volatile修饰
//类加载时新建对象和single指向内存对象是分为两步骤的。
//使用volatile是防止指令重排
public static Singleton getInstance() {
synchronized (Singleton.class){ //synchronized同步代码块
if (single == null) {
single = new Singleton();
}
}
return single;
}
}