【大厂面试题系列】:请写出Java中线程安全的单例模式【设计模式】




第一种:双重检查

public class Singleton {
    
    

    private volatile static Singleton singleton;

    private Singleton() {
    
    

    }

    public static Singleton getSingleton() {
    
    
        if (singleton == null) {
    
    
            synchronized (Singleton.class) {
    
    
                if (singleton == null) {
    
    
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

在这里插入图片描述



第二种:静态内部类

public class Singleton {
    
    


    private Singleton() {
    
    

    }

    public static class SingletonHolder {
    
    
        private static final Singleton singleton = new Singleton();
    }

    public static Singleton getInstance() {
    
    
        return SingletonHolder.singleton;
    }
}

在这里插入图片描述



第三种:枚举

public enum  Singleton {
    
    
    INSTANCE;

    Singleton() {
    
    
    }

}

在这里插入图片描述

创建枚举默认就是线程安全的,并且还能防止反序列化导致重新创建新的对象。


完善使用enum枚举实现单例模式

public class SingletonFactory {
    
    

    private enum Singleton {
    
    
        singleProtect;

        private product instance;

        private Singleton() {
    
    
            instance = new product();
        }

        public product getInstance() {
    
    
            return instance;
        }

    }

    public static product getInstance() {
    
    
        return Singleton.singleProtect.getInstance();
    }
}

//需要实现单例的类
class product {
    
    
    public product(){
    
    }
}

在这里插入图片描述




第四种:懒汉式(加锁)

public class Singleton {
    
    

    private static Singleton singleton; 
    
    private Singleton() {
    
    
    }
    
    public static synchronized Singleton getInstance() {
    
    
        if (singleton == null)
            singleton = new Singleton();
        return singleton;
    }

}

在这里插入图片描述




觉得不错的小伙伴可以一键三连哦!,感谢支持!!!

Java从入门到入坟学习路线目录索引


开源爬虫实例教程目录索引


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/llllllkkkkkooooo/article/details/113938391