DCL单例为什么要加volatile? 影歌丶黯水 2020-07-15 288 阅读1分钟 class T { int m = 8; } T t = new T(); 0 new #2 <T> 3 dup 4 invokespecial #3 <T.<init>> 7 astore_1 8 return 首先new一个对象的时候会申请一块内存空间, m = 0;然后执行构造方法,这时候m = 8; 由于创建对象的时候,thread1执行了半初始化,这时候有可能发生了指令的重排,thread2获得t不为空,直接就使用了半初始化的t,所以需要加volatile。