在java內(nèi)存模型中混弥,volatile 關(guān)鍵字作?可以是保證可見性或者禁?指令重排遮斥。這?是因?yàn)?singleton = new Singleton() ,它并?是?個(gè)原?
操作仅乓,事實(shí)上鳖敷,在 JVM 中上述語句?少做了以下這 3 件事:
第?步是給 singleton 分配內(nèi)存空間;
第?步開始調(diào)? Singleton 的構(gòu)造函數(shù)等挽唉,來初始化 singleton滤祖;
第三步,將 singleton 對(duì)象指向分配的內(nèi)存空間(執(zhí)?完這步 singleton 就不是 null 了)瓶籽。
這?需要留意?下 1-2-3 的順序匠童,因?yàn)榇嬖谥噶钪嘏判虻膬?yōu)化,也就是說第 2 步和第 3 步的順序是不能保證的塑顺,最終的執(zhí)?順序汤求,可能是 1-
2-3,也有可能是 1-3-2严拒。