是需要的,new对象不是原子性操作,多条指令有可能会发生重排
Volatile可以防止指令重排,保证顺序执行
- new 申请内存
- invoke 调用构造方法 给变量赋值
- astore 将引用值赋值给 内存t
如果astore先发生相当于直接将默认值赋值给内存t,下一个线程来的时候可能会读取到一个假的变量值。
单例模式下要不要加volatile
最新推荐文章于 2024-10-11 16:51:06 发布
是需要的,new对象不是原子性操作,多条指令有可能会发生重排
Volatile可以防止指令重排,保证顺序执行
- new 申请内存
- invoke 调用构造方法 给变量赋值
- astore 将引用值赋值给 内存t
如果astore先发生相当于直接将默认值赋值给内存t,下一个线程来的时候可能会读取到一个假的变量值。