面试
java 面试官也经常面试这个 单例模式 ,一般能说出 两私一公 就不错了
java程序员平时开发用的少,但面试遇到多啊,也是有必要研究下的
什么叫两私一公
- 私有的 构造函数
- 私有静态实例属性
- 公共的获取实例的 静态方法
基础知识点
多线程 、 线程 安全、 static 、构造函数、枚举
例子1
传统单线程环境下
缺点:线程不安全

例子2
- 多线程下通过 synchronized 保证线程安全
- 跟例子1就多了同步,实例初始过了就直接返回实例不用进入同步代码块了
- 多重检查锁的方式去保证安全
- 缺点:还是可以通过 反射去创建实例 ,不完美啊

例子3(完美)
利用枚举的特性在 JVM 层保证绝对的单例

为啥枚举的单例就完美了?
枚举本身是无法通过反射、克隆、反 序列化 等等把对象初始出来的。
枚举底层原理我就不在这里细说了。
总结
- 搞懂两私一公(面试的时候能说出第2个例子就可以)
- 枚举完美单例(能说出第3个例子就非常好)
java程序员、编程、后端开发