面试里让你写线程安全单例,通常不是只看结果能不能跑,而是看你是否理解并发下的可见性、指令重排和初始化时机。准备时不需要背很多变种,先抓住两种常用写法就够了。
双重检查锁适合展示并发理解
双重检查锁的重点不只是 synchronized,还包括为什么实例引用需要配合 volatile。如果只把代码写出来,但说不清这个点,面试官通常会继续追问。
静态内部类写法更简洁
如果题目更偏实际工程,静态内部类方案往往更容易写对。它利用类加载时机完成延迟初始化,不需要每次获取实例都做同步判断。
不同写法要知道取舍
饿汉式实现简单,但不是严格意义上的延迟加载;懒汉式如果没有同步保护,就会有线程安全问题。能把这些取舍顺手讲出来,会比只写一种答案更好。
别忽略反射和序列化破坏单例
如果岗位偏资深,可以补一句:单例模式在反射和反序列化场景下还可能被破坏,需要额外保护。这个点很短,但常常能体现深度。
结论
线程安全单例这道题,优先准备双重检查锁和静态内部类两种写法,再补上背后的并发原因,基本就够用了。
正文完




