单例模式(饿汉、懒汉)高频面试考点

单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。

饿汉模式(初始就直接创建好)

类加载的时候实例创建并初始化好了,所以是线程安全的。

//外界不能 new 这个类,所以用 static 来修饰字段和方法
//不允许在类外修改创建的实例,所以实例用 private 声明
public class Singleton {
    private Singleton(){}
    private static Singleton singleton=new Singleton();//直接创建好
    public static Singleton getInstance(){
        return singleton;
    }

懒汉模式(需要时再创建)双重检测保证线程安全

singleton = new Singleton();

该语句非原子操作,实际是三个步骤。

  • 1.给singleton分配内存;
  • 2.调用 Singleton 的构造函数来初始化成员变量;
  • 3.将给singleton对象指向分配的内存空间(此时singleton才不为null);

必须使用volatile保证执行顺序,比如三个步骤重排序后为1 3 2,这样第一个线程初始化对象到一半,第二个线程来发现已经不是null了就直接返回了 实际上该对象此时还没有完全初始化 可能会出现这个问题。

synchronized使用Singleton类的Class对象作为锁对象,当多个线程同时访问getInstance()方法时,只有一个线程能够进入同步代码块实例化Singleton类,保证了单例的唯一性。

public class Singleton {
    private Singleton(){}
    private static volatile Singleton singleton=null;
    public static Singleton getInstance(){
        if(singleton==null){//第一次判断是为了提升效率,先判断若不为null,锁也没必要抢,抢锁开销是很大的
            synchronized (Singleton.class){
                if(singleton==null){
                    singleton=new Singleton();
                }
            }
        }
        return singleton;
    }
}

全部评论

相关推荐

昨天 16:54
已编辑
门头沟学院 后端
5.15 一面介绍部门业务自我介绍1. 线程池介绍2. 手搓线程池(搓不出来,我太菜了)3. JVM中CMS和G1的区别?4. select 执行顺序5. 联合索引(a,b,c)走索引吗?select * from tabel where a = 10 and b < 5 order by c;(走)select * from table where b = 5 and c = 10 order by a;(不走)select * from table where b = 5 and c = 10 group by a;(不走)6. 场景题:设计一个发红包、抢红包的功能、模块,选择合适的数据库,关键链路流程。(里面有些问题)7. over感觉已挂反问:1. 工作地点。2. 聊一下大模型应用开发前景怎么样?有没有什么建议?追问:2.1 大模型应用开发用java好还是python好?2.2 有开发经验吗?介绍自己的开发应用思路、RAG、向量数据库。2.3 对MCP理解,和Function call 的区别?--------------------------------------------------5.19 二面(KPI)无自我介绍1.项目如何考虑高并发文件上传的,涉及那些模块,如何交互的?2.数学竞赛、建模竞赛和计算机设计竞赛(本科的历史那么悠久了还问)3.TCP、UDP的区别。4.Https连接过程。5.操作系统:用户态和内核态区别。6.介绍hashMap。7.并发编程JUC下的类熟悉吗?8.JVM结构。9.强引用、软引用、弱引用、虚引用。面完秒挂(over)虽然我菜,但我写面经,攒人品!
查看46道真题和解析
点赞 评论 收藏
分享
评论
3
8
分享

创作者周榜

更多
牛客网
牛客企业服务