一、单例模式
饿汉式(程序启动时就将对象实例化出来)、懒汉式(程序启动时不加载,等需要用到这个对象了再去实例化)
二、懒汉双检锁模式

//代码示例
public class SingleInstance {
    //必须有volatile修饰(防止指令重排序)
    private volatile static SingleInstance instance;
    //构造函数必须私有(防止外部通过构造方法创建对象)
    private SingleInstance() {
    }
  
    public static SingleInstance getInstance() {
        //第一个判空(如果是空,就不必再进入同步代码块了,提升效率)
        if (instance == null) {
            //这里加锁,是为了防止多线程的情况下出现实例化多个对象的情况
            synchronized (SingleInstance.class) {
                //第二个判空(如果是空,就实例化对象)
                if (instance == null) {
                    //新建实例
                    instance = new SingleInstance();
                }
            }
        }
        return instance;
    }
}

三、饿汉模式

public class SingleTon {
    // 惟一的这一个对象
    private static SingleTon singleTon = new SingleTon();
    private SingleTon() {}
    // 调用此方法时,singleTon对象已经产生过了,多线程场景下取回的是同一个单例对象
    public static SingleTon getSingleton() {
        return singleTon;
    }
}
最后修改:2023 年 02 月 16 日
如果觉得我的文章对你有用,请随意赞赏