试想一下,如果不加 volatile,那么线程A在实行到上述代码的第 ② 处时就可能会实行指令重排序,将原本是 1、2、3 的实行序次,重排为 1、3、2。但是特别情况下,线程 A在实行完第 3 步之后,如果来了线程 B实行到上述代码的第 ① 处,判断 instance 对象已经不为 null,但此时线程 A还未将对象实例化完,那么线程B将会得到一个被实例化“一半”的对象,从而导致程序实行出错,这就是为什么要给私有变量添加 volatile 的原因了。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |