volatile关键字的作用

2022-11-01  本文已影响0人  高19

要了解这个关键字的作用,我们需要知道两个概念

  1. 可见性
    Java编程语言中允许线程访问共享变量。为了确保共享变量能够被准确和一致的更新,线程应该确保通过排它锁单独获得这个变量。
  2. 指令重排
    在编程执行过程中为了性能考虑,编译器和CPU可能会对指令重新排序。对于并发多线程场景下,指令重排会产生不确定的执行效果。

所以volatile针对可见性

针对指令重排

public volatile boolean sign;
descriptor: Z
flags: ACC_PUBLIC, ACC_VOLATILE

从字节码层面,添加ACC_VOLATILE,在汇编指令的打印会有lock addl$0x0,(%rsp)s
从JVM层面,JMM提供了8个Happen-Before规则来约束数据之间竞争,4个内存屏障(LL LS SL SS)和As-if-serial
从硬件层面,sfence、Ifence、mfence

上一篇 下一篇

猜你喜欢

热点阅读