单例模式

饿汉式

// 私有化构造器,防止外部直接new出对象
private Singleton01(){

}

//饿汉式,直接在静态变量中创建对象,优点①线程安全,缺点类加载时间过长
private static Singleton01 singleton01 = new Singleton01();

//暴露出方法返回创建的对象
public static Singleton01 getInstance(){
    return singleton01;
}

懒汉式

//私有化构造器
private Singleton02(){

}

//创建静态变量,volatile禁止指令重排&线程可见,但是并不能保证线程安全
private static volatile Singleton02 singleton02;

//懒汉式,优点节省内存,在调用方法时创建对象;缺点:取对象多了两步判断和加了锁,浪费时间
//在jdk8中、list、spring创建对象都是懒汉式,在真正调用增加方法的时候从内存中申请空间
public static Singleton02 getInstance(){
    if(singleton02==null){
        synchronized(Singleton02.class){
            if(singleton02==null){
                singleton02 = new Singleton02();
            }

        }
    }
    return singleton02;
}
posted @ 2023-03-20 09:30  sugarstar  阅读(12)  评论(0)    收藏  举报