public class LazySingleton { private int someField; private static LazySingleton instance; private LazySingleton() { this.someField = new Random().nextInt(200)+1; // (1) } public static LazySingleton getInstance() { if (instance == null) { // (2) synchronized(LazySingleton.class) { // (3) if (instance == null) { // (4) instance = new LazySingleton(); // (5) } } } return instance; // (6) } public int getSomeField() { return this.someField; // (7) } }
这是一个懒汉单例模式 + DCL 双检测锁机制。
不加 volatile 关键字,真的存在多线程下,getInstance 拿到的对象不为空但是没有完全初始化的情况吗?
如果存在,能不能写段代码复现一下?
理论我已懂,就是无法再现一个例子推到上面的 DCL 代码。