volatile变量的第二个语义是禁止指令重 排序优化

特别是在 多个CPU的情况下, 并发的时候, 应该优先考虑使用 volatile 关键字。 可以让 程序 按照 代码的 的先后顺序执行。否则可能 后写的代码 先执行。 因为 JVM 会可能会对 代码 的执行进行 重排序,重排序是为了提高程序执行的效率。 可是在并发的时候,就容易出现 一下 问题了。

使用volatile变量的第二个语义是禁止指令重 排序优化, 普通的变量仅仅会保证在该方法的执 行过程中所有依赖赋值结果的地方都能获取到正 确的结果, 而不能保证变量赋值操作的顺序与程序代码中的执行顺序一致。 因为在一个线程的方 法执行过程中无法感知到这点, 这也就是Java内 存模型中描述的所谓的“线程内表现为串行的语 义”(Within-Thread As-If-Serial Semantics) 。

《深入理解JVM虚拟机》

猜你喜欢

转载自my.oschina.net/u/2419285/blog/1803151