用上面的 代码 实现 java单例 其实是有问题的。由于JVM可能有指令重排序问题,所以在 new MyClass();调用的时候有可能类未初始化,其它线程就拿到了这个Instance未初始化完成的对象。我的问题是如果将代码改为注释掉的那两行是否就可以避免这个问题?
可以。
你描述的这种情况会出现吗 ? 其他线程应该也只能通过 GetInstance来获得instance吧, 返回的必然是初始化完成的呀。
指令重排序是指对一块区域内的代码,jvm有可能把比较耗时的操作放在后面执行,单线程的话,对执行结果不会有影响.多线程中synchronized 是可以防止指令重排的.
上面创建Object类型的变量是做什么用的