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

举报
Code皮皮虾 发表于 2021/07/28 18:16:02 2021/07/28
【摘要】 【大厂面试题系列】:请写出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;
    }

}

在这里插入图片描述





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

另外,下面是我的公众号,每日都会分享优质博文,如果有兴趣的小伙伴也可以关注一下的啦😁

image.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。