单例模式有哪几种写法?双重检查锁为什么要加 volatile?
先自己想一想,再看参考要点
参考要点
- 写法有懒汉式(线程不安全)、饿汉式、方法加 synchronized、双重校验锁、静态内部类、枚举(还能防反射和反序列化)
- new Singleton() 分为分配内存、初始化、赋值给引用三步,可能被重排序为先赋值再初始化,另一个线程在外层判空时就会拿到未初始化的对象,volatile 禁止这种重排序
参考要点
学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。