采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
volatile的本质是每次涉及到变量读写的时候都把变量值在工作内存和主内存之间进行同步。单例初始化的时候,1.分配对象内存空间 memory = allocate(); 2.初始化对象 ctorInstance(); 3.设置对象实例指向刚刚分配的内存 instance = memory; 这三步是怎样通过volatile特性达到不重排序的?
你好,当有volatile时,就会限制这里的重排序,这是jmm里约定的,并由jdk来保证的,本质上是volatile修饰的变量对应的读写操作在生成cpu指令时不允许编译器进行重排序,这是和其他变量的区别,除了限制重排序之外,还会额外插入内存屏障,来保证可见性。
非常感谢!
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.2k 12